当单元格包含某个文本时,删除行的Gapps脚本在前800行后停止工作

时间:2018-01-30 18:49:14

标签: google-apps-script google-sheets

我在这个脚本上有一个超过3000行和24列以上的电子表格。

当我执行这个脚本时,它在第一分钟运行正常,然后它就停止工作了。

我刷新电子表格,然后再次运行脚本。之前删除的行已消失,它将再次开始执行。

几秒钟后,删除了几行,它表示脚本已完成,但我清楚地看到更多行,其中包含单词Kitten。

如果我再次运行该脚本,它将使用单词Kitten删除更多行。然后它会说脚本已经完成了,当清楚地说,在单元格中有更多行有单词Kitten。

我必须一遍又一遍地运行脚本以最终删除所有实例。

此电子表格包含大量数据,包括查询,支点,导入范围,例如

也许这是一个尺寸问题?

Gaaps脚本是否有意用于这么大的文件? (3000行,每行有24列数据)。

如果是这样,有什么方法可以优化?也许是一种使用鼠标在选定范围内使用UI运行脚本的方法?

function deleteRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('DataSheet');
  var values = s.getDataRange().getValues();

for (var row in values)
  if (values[row][3] == 'Kittens')
  s.deleteRow(parseInt(row)+1);
};

1 个答案:

答案 0 :(得分:0)

您可能超过了脚本运行时,请参阅Quotas。想一想解决问题的方法。 您要完成的工作不是删除包含“小猫”一词的行,而是删除不包含“小猫”的范围值。

function filterDataRange() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('DataSheet');
  var range = s.getDataRange();
  // Get row and column of first cell in range
  var firstRow = range.getRow();
  var firstCol = range.getColumn();
  var values = range.getValues();
  // Filter values in column 4 using a custom function
  values = values.filter(filterKittenInCol4);
  // Clear data range
  range.clear();
  /* Get the filtered data range:
       - first cell is the same as the old range
       - values.length = numRows
       - values[0].length = numColumns
     and set the values */ 
  s.getRange(firstRow, firstCol, values.length, values[0].length).setValues(values);
};

function filterKittenInCol4(e) {
  return e[3] != 'Kittens'; 
};