2013-01-17 42 views
0

我已經完成了漫長的搜索並找不到要查找的內容。也許有人可以幫忙嗎?Google Apps腳本可從兩個不同的電子表格中刪除行

我有兩個Google Spreadsheets,Spread1和Spread2。我只會引用這兩個電子表格的sheet1。

我需要一個腳本,刪除Spread1列B中包含「Hello」的行,但僅當Spread2列B中出現「Hello」時纔會刪除。

如果行被刪除(如果同一個詞出現在兩個列),那麼我想劇本回去Spread2,也與「你好」刪除行B列

打完腳本已經運行,「Hello」不會出現在任何一個電子表格的B列中。

如果有人知道如何做到這一點,我將非常感激 - 你的寶貴幫助將非常感謝。

感謝您的期待!

編輯:

我有這個腳本,刪除Spread2包含「你好」,在B列行:

function deleteRow() { 
    var ss = SpreadsheetApp.openById("SPREADSHEET KEY"); 
    SpreadsheetApp.setActiveSpreadsheet(ss); 
    var s = ss.getSheetByName('Sheet1'); // change to your own 
    var values = s.getDataRange().getValues(); 
    for(var row = values.length -1; row >= 0; --row) 
    if (values[row][1] == 'Hello') 
     s.deleteRow(parseInt(row)+1); 
}; 

,但我只希望它這樣做時,「你好」出現在列B的Spread1。有任何想法嗎?由於

+0

腳本的哪部分是你遇到問題? - 顯示代碼。您所描述的所有內容都可以使用電子表格服務輕鬆交付https://developers.google.com/apps-script/class_sheet – DavidF

+0

嗯,我有這個腳本刪除了Spread2中列B中包含「hello」的行: – Vin

+0

嗯,我有這個腳本它刪除Spread2中列B中包含「hello」的行: function deleteRow(){ var ss = SpreadsheetApp.openById(「SPREADSHEET KEY」); SpreadsheetApp.setActiveSpreadsheet(ss); var s = ss.getSheetByName('Sheet1'); //更改爲您自己的 var values = s.getDataRange()。getValues(); (var row = values.length -1; row> = 0; --row) if(values [row] [3] =='Today today') s.deleteRow(parseInt(row)+1) ; }; 但我只希望它在Spread1的B列中出現「Hello」時才這樣做。有任何想法嗎?謝謝 – Vin

回答

1

爲了簡化這個解決方案,我使用2D Array Library,爲ArrayLib.find()。你可以寫一個循環遍歷sheet2中的行的函數來找到'Hello'。

function deleteRow() { 
    // This assumes script is independent of either sheet 
    var s1 = SpreadsheetApp.openById("SPREADSHEET KEY1").getSheetByName('Sheet1'); 
    var s2 = SpreadsheetApp.openById("SPREADSHEET KEY2").getSheetByName('Sheet1'); 

    var values1 = s1.getDataRange().getValues(); 
    var values2 = s2.getDataRange().getValues(); 

    // Check if "Hello" appears in column B of Spread2. 
    if (ArrayLib.find(values2, 1, 'Hello') != -1) { 
    // Yes it does, so delete rows containing "Hello" in column B of Spread1 
    for(var row = values.length -1; row >= 0; --row) 
     if (values1[row][1] == 'Hello') 
     s1.deleteRow(parseInt(row)+1); 
    } 
    } 
} 

可以進一步通過去除調用deleteRow(),以陣列形式修改Spread1,然後調用clearContent()setValues()到修改後的數組寫回片優化此。這樣,您用2代替n服務呼叫,並節省大量運行時間。

+0

非常感謝您的解決方案。它完美的工作! – Vin

1

您可以參考表格都在同一個腳本和處理兩個數組在步驟

function deleteRow() { 
     var ss = SpreadsheetApp.openById("SPREADSHEET KEY"); 
     SpreadsheetApp.setActiveSpreadsheet(ss); 
     var s = ss.getSheetByName('Sheet1'); // change to your own 
     var values = s.getDataRange().getValues(); 
     var ss1 = SpreadsheetApp.openById("SPREADSHEET KEY1"); 
     var s1 = ss1.getSheetByName('Sheet1'); 
     var values1 = s1.getDataRange().getValues(); 
      // assumes sheets have same number of rows and you wish to delete corresponding rows in each 
     for(var row = values.length -1; row >= 0; --row) 
     if (values[row][1] == 'Hello' || values1[row][1] == 'Hello') 
      s.deleteRow(parseInt(row)+1); // parseInt is not required 
      s1.deleteRow(parseInt(row)+1); 
    }; 
+0

您好,非常感謝您的回覆。恐怕我的電子表格不會有相同數量的行,並且不是我想要刪除的相應行。如果'你好'在傳播2(B列)的任何一行中,Spread1可能包含多行'Hello'(在B列),我想刪除它。任何想法,我如何實現這一目標?非常感謝 – Vin

相關問題