簡體   English   中英

Google Apps腳本可從兩個不同的電子表格中刪除行

[英]Google Apps Script to delete rows from two different spreadsheets

我做了很長時間的搜索,找不到我想要的東西。 也許有人可以幫忙嗎?

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

我需要一個腳本,該腳本刪除Spread1的B列中包含“ Hello”的行,但是僅當Spread2的B列中出現“ Hello”時才刪除。

如果刪除了行(如果兩個列中都出現相同的單詞),那么我希望腳本返回Spread2,並刪除列B中帶有“ Hello”的行。

因此,腳本運行后,“ Hello”將不會出現在任何電子表格的B列中。

如果有人知道如何實現這一目標,我將不勝感激-您的寶貴幫助將不勝感激。

感謝您的光臨!

編輯:

我有此腳本,該腳本刪除Spread2中B列中包含“ hello”的行:

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);
};

但是我只希望Spread1的B列中出現“ Hello”時這樣做。 有任何想法嗎? 謝謝

您可以在同一腳本中引用兩個電子表格,並在步驟中處理兩個數組

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);
    }; 

為了簡化此解決方案,我將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()將修改后的數組寫回到工作表中。 這樣,您將n服務調用替換為2,並節省了大量運行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM