0

我进行了长时间的搜索,但找不到我要找的东西。也许有人在那里可以提供帮助?

我有两个 Google 电子表格,Spread1 和 Spread2。我只会参考两个电子表格的 sheet1。

我需要一个脚本来删除Spread1的B列中包含“Hello”的行,但前提是“Hello”出现在Spread2的B列中。

如果行被删除(如果相同的单词出现在两列中),那么我希望脚本返回到 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”时这样做。有任何想法吗?谢谢

4

2 回答 2

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);
    }; 
于 2013-01-17T21:54:15.923 回答
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,并节省大量运行时间。

于 2013-01-18T03:11:17.663 回答