google-apps-script - 使用 Google Apps 脚本删除 Google 表格中的行

标签 google-apps-script google-sheets

我在尝试使用 Google Apps 脚本删除与特定值匹配的行时遇到了最奇怪的错误。

这是我的代码:

function myFunction() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = doc.getSheetByName("file.csv");
  
  var values = sheet.getRange("N2:N").getValues();
  
  var row_del = new Array();
    
  for(var i=0;i<values.length;i++)
  {
    if(values[i] == 'del'){
      row_del.push(i+2); // This line was added for debugging purposes.
     // sheet.deleteRow(i+2) was the line that was in this condition
     // (i+2) is used because row 1 has headers and the range starts from 0.
    }
  }
  
//  Logger.log(row_del);
//  GmailApp.sendEmail("my_email_address", "subject", row_del)
 
  for (var i = 0; i < row_del.length; i++)
  {
    sheet.deleteRow(row_del[i]);
  }
  
}

我编写的代码选取了应删除的行号,但在我的第一次尝试中并未删除所有这些行。我应该多次执行脚本才能删除这些行。

如果我的代码有错误,它应该显示出来,如果逻辑错误,则必须删除不正确的行。我没有遇到这两种情况,我应该多次执行此函数。

我在这里缺少什么吗?

最佳答案

当从工作表中删除一行时,即使脚本继续运行,它下面的行也会重新编号。如果脚本随后尝试也删除这些行,则结果是不可预测的。因此,删除行时应从下到上进行。对于你的情况,就像这样:

for (var i = row_del.length - 1; i>=0; i--) {
  sheet.deleteRow(row_del[i]); 
}

关于google-apps-script - 使用 Google Apps 脚本删除 Google 表格中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924842/

相关文章:

google-apps-script - 如何从 Apps 脚本库中调用 CreateMenu()?

excel - 根据条件连接/连接列文本

google-apps-script - 无法将DeveloperMetadata 添加到行

java - Google Sheets V4 Java - 清除工作表

google-apps-script - 仅在提交 Google 表单后才允许从 Google 云端硬盘下载文件

google-apps-script - Google Apps 脚本调用地址验证 API

google-apps-script - 如何使用 Google Script 将数据添加到 Google Sheets 中的特定行

google-apps-script - 我无法更新 Google App 脚本上的脚本

google-apps-script - 在具有 Html 服务的站点中显示电子表格数据

javascript - 如何通过 Google 脚本获取每个单独列的单独总和?