GSheet 脚本:如何优化我的行和工作表迭代器

风投用

长话短说,我有一个 Google Script 可以自动清除 GSheet 中的内容。它设置在触发器上并且可以工作……代码完成了它应该做的事情。问题是它运行缓慢。迭代器运行需要 2 到 3 分钟。为了帮助您确定任务的大小:8 张纸中的每张纸上有 150 行。

该代码的目的是根据行第一列中单元格的值清除每张工作表上的许多行。

所以我想知道是否有人对改进运行时间有任何见解或建议。我了解我使用 for 循环逐行检查行的方法,这是一项耗时的任务。我想不出带有数组或其他东西的替代方法?

谢谢大家!

这是代码:

     function Reset_Button() {

      var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
     
       for (var i = 1; i < sheets.length ; i++ ) {
    
         var sheet = sheets[i];
         sheet.getRange("C2").setValue(new Date());
    
         var rangeData = sheet.getDataRange();
         var lastRow = rangeData.getLastRow();
         var searchRange = sheet.getRange(1,1, lastRow, 1);

            for ( j = 1 ; j < lastRow ; j++){

              var value = sheet.getRange(j,1).getValue()
                if(value === 0){
                sheet.getRange(j,2,1,5).clearContent()
  }}}}
维陶塔斯

通常,您希望尽可能少地写入电子表格。目前,您的代码会遍历每一行并在必要时对其进行编辑。而是将您将使用的整个数据范围放入一个变量中(假设dRange并使用.getValues()将所有值的二维数组放入第二个变量中(假设dValues)。然后简单地迭代dValues""在每个您想要的地方设置一个空白清楚。一旦你完成去在所有的值,只是做了dRange.setValues(dValues)(这就是为什么我说要保持在一个单独的变量范围内)。因此,作为一个例子,下面将清除列B通过F,如果列A有一个0

function test(){
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  for (var i = 1; i <sheets.length; i++) {
    sheets[i].getRange("C2").setValue(new Date());
    var dRange = sheets[i].getDataRange();
    var dValues = dRange.getValues();

    for (var j = 1; j < dRange.getLastRow(); j++){
      if (dValues[j][0] == 0) {
        for (var c = 1; c < 6; c++) {
          dValues[j][c] = ""
        }
      }
    }
    dRange.setValues(dValues);
  }
}

对于约 170 行的单张纸,这需要几秒钟。需要注意的一件事是,我是根据您的脚本编写的,您C2在您的 sript 中设置了一个日期值(因此在我根据您的脚本编写的那个)中,该值落在您检查要清除的范围内,所以加倍检查你的范围

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使GSheet提取操作更快?

如何使用已经包含脚本的新gsheet?

下拉菜单按列名过滤行-gsheet

GSheet:在不同列中查询日期范围内的行

如何在 GSheet 中的多列上创建时间戳

如何使用脚本/宏在特定的 GSheet 列中查找和替换?

BigQuery-GSheet表上的脚本运行查询不起作用

如何根据自定义排序功能对 gsheet 表进行排序?

Google Apps脚本在Gsheet中的html文件中动态列出项目符号

微调2个GoogleApp脚本?GMail到GDrive以及GDrive到GSheet

在Google Apps脚本网络应用中使用Google Visualization API显示GSheet范围时出错

从Gsheet文件复制粘贴Google Apps脚本代码时出现问题

将 .xlsm 文件传输到 GSheet 时出现 Google Apps 脚本错误“错误请求”

gSheet - 無法使用數組中的過濾器獲得結果

使用 gsheet api 和 javascript 更新范围内的特定单元格

松弛> Gsheet> VLookup>松弛

BigQuery GSheet上传

如何使谷歌应用程序脚本 - 日历 createEvent() 接受来自使用数组公式填充的单元格的 GSheet 输入

将带有 Google Apps 脚本的图像上传到 GSheet - 在 HTML 服务模式对话框之间传递值

pygsheet 中的 GSheet 包装策略

关于R中的“ gsheet”包

是否有一个Apps脚本功能可将活动仪表板中存在的查看器信息导出到单独的GSheet中?

我们如何在一个单元格(gsheet响应)中将多个选择答案(来自gform)声明为数组中的单独值?(加油站)

如何按Excel或GSheet中第二列的值对第一列中具有相等值的列表进行排序?

用于解析 JSONSchema 的 gsheet importjson 查询

Gsheet - 单元格的拆分值

REGEX 积极展望 REGEXEXTRACT GSheet 公式

gsheet batch_update在python 3.8上有问题吗?

在Gsheet中标识ImportXML的确切XPath