移至运行时不执行的Google脚本

时间:2018-06-28 09:06:19

标签: javascript google-apps-script google-sheets

几周前,我问了这个问题,并得到了很好的答复。基于此,我修改了已有的代码,它开始工作!基本上,代码将遍历工作表中的一列,并根据特定列中的值在工作表中移动特定行。根据建议,脚本将从下而上运行。这是我正在使用的东西:

function move2Archive() {

  var columnNumberToWatch = 21; // column A = 1, B = 2, etc.
  var valueToWatch = "Yes"; //needs to have a Yes in the column for script to work
  var sheetNameToMoveTheRowTo = "4.Archive";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("3.Customer Tab");
  var row = 1;
  var range = sheet.getRange(row,columnNumberToWatch,sheet.getLastRow(),1).getValues(); //get  Values of columnNumberToWatch
  var range2 = sheet.getRange("B:B").getValues()
  var len = range2.filter(String).length; 
  var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);

  //Browser.inputBox(len) //used this to debug and check whether the len variable is correct

 for (row=len; row> 0 ; row--){

 if (range[row-1][0] == valueToWatch) { //if the value in the column is the value to watch; index [0] method used to get value of the column of interest
      var targetRow = targetSheet.getRange("B:B").getValues().filter(String).length //ensure that it is being pasted on the last row (using Unique ID column)
      var targetRange = targetSheet.getRange(targetRow + 1, 1); //add 1 spaces to cater for the header row at the top

    //Browser.inputBox(row) //used to debug and check where the values will paste

    sheet.getRange(row, 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(row);


  }
}
}

当我运行脚本时,它会无休止地运行,而不会将任何内容移至下一列。但是,当我运行“调试行”(即Browser.inputBox命令)时,它们表明脚本确实可以正确设置参数。例如,第二个Browser.inputBox(row)显示循环,并输出带有行号的输入框,其中找到了值“是”。问题在于,它只是无法执行,我也不知道为什么!我第一次使用它时工作正常,在有20个yes行的工作表上尝试后,它只是停止了一半... aaargh!

此外,只是为了使自己幸运,有没有办法加快脚本的速度?很高兴知道是否有一种更有效的方法来执行相同的过程。

谢谢!

1 个答案:

答案 0 :(得分:0)

在尝试删除行之前,可能与moveTo未完成有关。您尝试过flush吗?

sheet.getRange(row, 1, 1, sheet.getLastColumn()).moveTo(targetRange);
SlreadsheetApp.flush();
sheet.deleteRow(row)