2017-02-22 23 views
0

我有两片与下列数据集:循环超过两列和复制,只有当项目被匹配的行

表1:

05/12/2016 366505 3299193 217374 
06/12/2016 345886 3328374 219832 
07/12/2016 328152 3348070 221501 
08/12/2016 171627 3308919 222948 
09/12/2016 338694 3344380 225481 

表2:

05/12/2016 366505 3299193 217374 
06/12/2016 345886 3328374 219832 
07/12/2016 328152 3348070 221501 
08/12/2016 blank blank blank 
09/12/2016 blank blank blank 

我会喜欢能够遍历工作表的每一列1 ,然后与工作表2的每一列进行比较,并且对于每个缺失的日期,我想将相应的数据复制到Shee牛逼2.

我已经能够写这个到现在为止,但我不知道我应该使用逻辑的,我应该怎么安排我的代码:

function myFunction() { 

var sheet1 = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
var sheet2 = SpreadsheetApp.openById("ID").getSheetByName("Sheet2"); 

var date1 = sheet1.getRange(2, 1, sheet1.getLastRow()).getValues(); 
var date2 = sheet2.getRange(2, 1, sheet1.getLastRow()).getValues(); 


    var lastRow = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getLastRow() 

    for (var i = 0; i < date1.length; i++){ 
     var list1 = date1[i][0]; 
     var list2 = date2[i][0]; 
    if (//comparison between list1 and list 2 here){ 
    var data1 = sheet1.getRange(1,2).getValue(); 
    var data2 = sheet1.getRange(1,3).getValue(); 
    var data3 = sheet1.getRange(1,4).getValue(); 
    sheet2.getRange(i+1, 1,sheet1.getLastRow(), sheet1.getLastColumn()).appendRow([data1,data2,data3]);} 

} 

编辑#1:我重写我的大部分问题。一点也不清楚。我希望现在好转!

+1

只在最后缺少行吗?如果不是,那么你需要分别跟踪你的“当前第2页的行”。 例如 2016年5月12日 2016年6月12日 2016年7月12日 对 2016年5月12日 2016年7月12日 不匹配,因为sheet1中有2016年7月12日在其第三排,而第二张在第二排上有7/12/2016。 –

+1

你是否期望他们被订购?或者任何日期都可以在另一张纸上的任何地方? –

+0

它将永远在最后,并始终订购。换句话说,表1和表2中的日期列之间唯一可能的差异是最后的缺失日期。 –

回答

1

修改@SimonBreton代码以减少开销操作。代码中对修改细节进行了注释。简而言之,不要重复使用getValue/s和setValue/s,最好一次将所有数据/日期传递给一个数组,修改该数组。一旦所有的修改完成后,使用数组一次性设置值。

function myFunction() { 

var sheet1 = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
var sheet2 = SpreadsheetApp.openById("ID").getSheetByName("Sheet2"); 
//Get all the values as array rather then using getValues repeatedly. 
//Note: also gave num of columns as 3, to get values for all three columns/ 
var date1 = sheet1.getRange(1, 2, sheet1.getLastRow(),3).getValues(); //getRange(row, column, numRows, numColumns) 
var date2 = sheet2.getRange(1, 2, sheet1.getLastRow(),3).getValues(); 

// You can compare and add data to your date2 array 
    for (var i = 0; i < date1.length; i++){ 
     test = date1[i][0] 
     if(i < date2.length){ // make sure you dont exceed the length of the second array 
     test1 = date2[i][0] 
     if (test != test1) { 
     date2[i] = date1[i] // Note this is pass by reference, so if you modify date1 within this code. date2 will be also be modified. 
     } 
     } 
     else { //if you have more data in date1 use push to add elements to the end 
     date2.push(date1[i]) 
     } 
    } 
// Write the data only once at the end with the update date2 array. 
sheet2.getRange(1,2,date2.length,date2[0].length).setValues(date2) 
} 
0

这里有一个工作代码:

function myFunction() { 

var sheet1 = SpreadsheetApp.openById("ID").getSheetByName("Sheet1"); 
var sheet2 = SpreadsheetApp.openById("ID").getSheetByName("Sheet2"); 

var date1 = sheet1.getRange(1, 2, sheet1.getLastRow()).getValues(); //getRange(row, column, numRows, numColumns) 
var date2 = sheet2.getRange(1, 2, sheet1.getLastRow()).getValues(); 

    for (var i = 0; i < date1.length; i++){ 
     test = sheet2.getRange(i+1, 2).getValue() 
     test1 = sheet1.getRange(i+1, 2).getValue() 
     if (test != test1) { 
    var data1 = sheet1.getRange(i+1,2).getValue(); 
    var data2 = sheet1.getRange(i+1,3).getValues(); 
    var data3 = sheet1.getRange(i+1,4).getValue(); 
    sheet2.getRange(i+1, 2).setValue(data1); 
    sheet2.getRange(i+1, 3).setValue(data2); 
    sheet2.getRange(i+1, 4).setValue(data3); 
    } 
    } 
}