我一直致力于这个项目,并且不能按照我想要的方式让它工作。我刚开始使用谷歌脚本,我对它没有太多的了解。
我需要将数据从master复制到sheet2中,只要它已经存在于sheet2中。我只想针对这两张表检查提交日期列(现在)。
9/3/2014 10:37:04
9/3/2014 20:03:27
9/4/2014 0:47:14
2014/9/4 14:23:22
2014/9/4 14:31:49
2014/9/4 15:48:41
2014/9/4 15:55:16
9/5/2014 10:54:10
9/3/2014 10:37:04
9/3/2014 20:03:27
我需要Master中的最后6个提交日期才能复制到Sheet2。我尝试了各种代码,这是我正在使用的最后一次迭代,部分借鉴了这篇文章:Post
function updateSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = "Submissions";
var destinationSheet = "Applicant";
var source_sheet = ss.getSheetByName(sourceSheet);
var target_sheet = ss.getSheetByName(destinationSheet);
var lastCol = target_sheet.getLastColumn();
var lastRow = target_sheet.getLastRow();
//assumes headers in row 1
var r = target_sheet.getRange(2,1, lastRow - 1, lastCol);
//Note the use of an array
r.sort([{column: 1, ascending: true}]);
// Process sheet
_updateSpreadsheet(source_sheet, target_sheet);
}
function _updateSpreadsheet(source_sheet, target_sheet) {
var last_row = target_sheet.getLastRow();
var source_data = source_sheet.getDataRange().getValues();
var target_data = target_sheet.getDataRange().getValues();
var resultArray = [];
for (var n in source_data) {
var keep = true;
for(var p in target_data) {
if (source_data[n][0] == target_data[p][0]) {
keep = false; break;
}
}
// If no duplicate, add to sheet
if(keep){ resultArray.push(source_data[n])};
last_row++;
target_sheet.getRange("A"+last_row).setValue(source_data[n][0]);
target_data.push(n);
}
}
它不是仅添加最后的记录,而是添加所有记录。
显然我错过了一些东西,但我无法理解。非常感谢任何帮助。
答案 0 :(得分:0)
日期比较不像"正常"变量比较...,我们必须得到日期本机值才能获得相同的条件。(适用于>和<虽然)
以下是修改后的功能:
请注意,我限制范围以避免在for循环中包含比较中的标题 另外:我不理解最后的陈述,所以我评论了它。
function _updateSpreadsheet(source_sheet, target_sheet) {
var last_row = target_sheet.getLastRow();
var source_data = source_sheet.getDataRange().getValues();
var target_data = target_sheet.getDataRange().getValues();
var resultArray = [];
for (var n = 1 ; n < source_data.length ; n++) {
var keep = true;
for(var p = 1 ; p < target_data.length ; p++) {
if (new Date(source_data[n][0]).getTime() == new Date(target_data[p][0]).getTime()) {
keep = false; break;
}
}
Logger.log(keep);
if(keep){ resultArray.push([source_data[n][0]])};
}
last_row++;
Logger.log(resultArray);
target_sheet.getRange(last_row,1,resultArray.length,resultArray[0].length).setValues(resultArray);
// target_data.push(n);
}
另见我添加的记录器,它帮助我检查发生了什么; - )
我不确定你想要复制行还是只复制A列中的单元格......如果你想要复制行,请使用:
if(keep){ resultArray.push(source_data[n])};
根据您的评论,这是一个只复制目标表中某些列的版本:
(在现有代码中插入此部分)
...
// if(keep){ resultArray.push(source_data[n])};
// if(keep){ resultArray.push([source_data[n][0]])};
var columnsToKeep = [0,1,3,4,6,7,8,9,10,11,12,13,15,21,22];
var tempData = [];
if(keep){
for(var c in columnsToKeep){ tempData.push(source_data[n][columnsToKeep[c]])};
resultArray.push(tempData);
}
}
last_row++;
...
可读性的最终代码
function _updateSpreadsheet(source_sheet, target_sheet) {
var last_row = target_sheet.getLastRow();
var source_data = source_sheet.getDataRange().getValues();
var target_data = target_sheet.getDataRange().getValues();
var resultArray = [];
for (var n = 1 ; n < source_data.length ; n++) {
var keep = true;
for(var p = 1 ; p < target_data.length ; p++) {
if (new Date(source_data[n][0]).getTime() == new Date(target_data[p][0]).getTime()) {
keep = false; break;
}
}
Logger.log(keep);
// if(keep){ resultArray.push(source_data[n])};
// if(keep){ resultArray.push([source_data[n][0]])};
var columnsToKeep = [0,1,3,4,6,7,8,9,10,11,12,13,15,21,22];
var tempData = [];
if(keep){
for(var c in columnsToKeep){ tempData.push(source_data[n][columnsToKeep[c]])}
resultArray.push(tempData);
}
}
last_row++;
Logger.log(resultArray);
if(resultArray.length>0){
target_sheet.getRange(last_row,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}
}