通过数组/缓存减少执行时间的代码??? Google 应用脚本

Code to reduce execution time by array / caching??? Google App Script

我正在使用以下代码来编译已从 Twitter 推文列表中分离出来的 hastags 列表。

此代码忽略主题标签单元格没有值或错误值的所有行。

function CopyProcessedHashtags() {

  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = sSheet.getSheetByName("SortedIntoRows");
  var targetSheet = sSheet.getSheetByName("HashtagsList");
  var lastRow = sourceSheet.getLastRow();
  
  for (var i = 3; i <= lastRow; i++) {
    var cell = sourceSheet.getRange("E" + i);
    var val = cell.getValue();
      if (val != "") {
      if (val != "#VALUE!") {
      if (val != "#REF!") {

        var sourceRange = sourceSheet.getRange("B" + i + ":" + "E" + i);    
        var targetRow = targetSheet.getLastRow();
        targetSheet.insertRowAfter(targetRow+1);
        var targetRange = targetSheet.getRange("B" + (targetRow+1));
        sourceRange.copyTo(targetRange, {contentsOnly: true});
  }}}}}
};

麻烦的是有时有数千行,执行时间超过 6 分钟。

我知道批处理可以减少执行时间...

例子

for (var i = 1; i <= 100; i++) {
  SpreadsheetApp.getActiveSheet().deleteRow(i);

to

SpreadsheetApp.getActiveSheet().deleteRows(i, 100);

...我只是不知道如何重写我的代码以这种方式工作。

google 应用脚本还很陌生。

如果有人能在正确的方向上给我一些帮助,我将不胜感激。

谢谢!!

您可以使用 getValues() 检索范围内的所有数据并使用 Array.filter() 进行过滤。

示例:

代码:

function CopyProcessedHashtags() {

  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = sSheet.getSheetByName("SortedIntoRows");
  var targetSheet = sSheet.getSheetByName("HashtagsList");
  
  var data = sourceSheet.getDataRange().getValues();
  var filteredData = data.filter(dataRow => (dataRow[4] != "#VALUE!" && dataRow[4] != "#REF!" && dataRow[4] != ""));
  targetSheet.getRange(1,1, filteredData.length, filteredData[0].length).setValues(filteredData);
}

示例数据:

输出:

参考文献: