如果与单元格值匹配,应用脚本从Google表格中删除行?

时间:2018-04-12 21:26:40

标签: google-apps-script

我正在使用我的脚本删除我的Google表格文件的POHistory标签中的任何行,这些行在第一个单元格中的值与我在POTemplate选项卡的单元格E9中找到的值相比较。但是,在执行命令时我没有看到任何响应。不知道这里缺少什么。基本上,我收到一条错误消息,指出我要删除的行是"超出界限"。谢谢你的期待。

function deleteOld() {
  var app = SpreadsheetApp;
  var orderSheet = app.getActiveSpreadsheet().getSheetByName("POTemplate");
  var historySheet = app.getActiveSpreadsheet().getSheetByName("POHistory");
  var poNO = orderSheet.getRange("E9").getValue();
  var lastRow = historySheet.getLastRow();
  var myRange = historySheet.getRange("A2:A" + lastRow); 
  var data = myRange.getValues();
 for(i = 0; i < data.length; i++){
   if(data[i][0] != poNO){
   continue;
   }else{
  historySheet.deleteRow(i);
 }}}

1 个答案:

答案 0 :(得分:1)

因为您要删除一行,所以i值不再对应于相同的范围。例如,您有一个包含5个元素的数组:

[A, B, C, D, E]

如果您删除元素0,则会获得

[B, C, D, E]

现在你增加你的迭代器i++; // i = 1,所以你要操作的下一个值不是“B”,而是“C”。

你可以试试

function test() {
  var letters = ["A", "B", "C", "D", "E"];
  for (var i=0; i<letters.length; i++) {
    Logger.log("i : " + i + " || Letter: " + letters[i]);
    letters.shift();
  }
}

要修复代码,请添加一个独立于数组迭代器row的{​​{1}}变量。

尝试将其作为模板:

i