Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop GSheet脚本:如何优化行和表迭代器_For Loop_Google Apps Script_Google Sheets_Optimization_Iterator - Fatal编程技术网

For loop GSheet脚本:如何优化行和表迭代器

For loop GSheet脚本:如何优化行和表迭代器,for-loop,google-apps-script,google-sheets,optimization,iterator,For Loop,Google Apps Script,Google Sheets,Optimization,Iterator,长话短说,我有一个Google脚本,可以自动清除GSheet中的内容。它被设置在一个触发器上,并且可以工作……代码执行它应该执行的操作。问题是它运行缓慢。运行迭代器需要2到3分钟。为了帮助您确定任务的范围:8张工作表中的每一张都有150行 代码的目标是根据行第一列中单元格的值清除每张图纸上的多行 因此,我想知道是否有人有任何见解或建议,以改善运行时间。我了解使用for循环逐个检查行的方法,这是一项耗时的任务。我想不出另一种方法来处理数组之类的东西 谢谢大家 代码如下: function

长话短说,我有一个Google脚本,可以自动清除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()
  }}}}
功能复位按钮(){
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
对于(变量i=1;i
通常,您希望尽可能少地写入电子表格。当前,您的代码将遍历每一行,并在必要时对其进行编辑。相反,将要处理的整个数据范围放入一个变量中(比如说
dRange
,并使用
.getValues()
将所有值的2d数组放入第二个变量中(比如
dValues
),然后简单地迭代
dValues
,设置一个空白的
“”
在每个要清除的变量中。一旦完成所有值的清除,只需执行一个
拖动.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);
  }
}
功能测试(){
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
对于(var i=1;i