2017-02-22 28 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); 
    } 
    } 
}