javascript - 用于删除找到字符串的任何行的 Google 电子表格脚本

标签 javascript google-apps-script google-sheets spreadsheet google-sheets-api

我需要循环遍历工作表中的所有行/列并删除包含某些单词的行。理想情况下,我会使用正则表达式搜索工作表,但只要找到一个字符串就可以帮助我前进。我在 Stack Overflow 上看到很多关于查找和删除空行的帖子,但找不到有关搜索整个工作表并删除找到的行的任何内容。

这是我到目前为止所拥有的:

/* Delete rows */
function deleteRows() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var deleted = 0;  // Counter (don't need if we loop backwards)
  var regExp = new RegExp('word');

  for (var row = 0; row < values.length; row++) {
    var regExpMatch = values[row][1].match(regExp);
    if (regExpMatch.length > 0) {
      sheet.deleteRow(row + 1 - deleted);
      deleted++;
    }
  }
  SpreadsheetApp.flush();
};

但是,这仅搜索 B 列,并且会抛出错误“TypeError:无法从 null 读取属性‘长度’”,即使我的电子表格中的 B 列中存在“word”。如果我做一个更简单的版本,例如:

/* Delete rows */
function deleteRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var deleted = 0;  // Counter (don't need if we loop backwards)

  for (var row = 0; row < values.length; row++) {
    if (values[row][1].search("WordThatExistsInOneRow")) {
      sheet.deleteRow(row);
      deleted++;
    }
  }
  SpreadsheetApp.flush();
};

它开始删除每一行,即使“WordThatExistsInOneRow”仅显示在 1 行中。

最佳答案

您没有正确编写循环逻辑,您需要循环遍历每一行,然后循环该行中的每一列,然后分配要删除的行索引,必须按顺序执行。试试这个:

/* Delete rows */
function deleteRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var toDelete = [];

  for (var row = 0; row < values.length; row++) {
    for(var column = 0;column<values[row].length;column++){
      if (values[row][column].indexOf("WordThatExistsInOneRow") > -1){
        toDelete.push(row);
      }
    }
  }

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

  SpreadsheetApp.flush();
};

关于javascript - 用于删除找到字符串的任何行的 Google 电子表格脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462125/

相关文章:

java - GWT 客户端错误 (TypeError) : b is null

forms - 使用HtmlService使用Google Apps脚本上传文件

javascript - Google Apps 脚本重新声明 Const 错误

database - 查询谷歌电子表格的特定工作表

php - 跳过 Google 表格 PHP 上的值插入

javascript查找数组值的总和

javascript - 使用来自 addthis.com 的社交分享按钮

javascript - 无法替换字符串中的子字符串

google-apps-script - 使用 Google Apps 脚本响应 Google Calendar API 的推送通知

google-sheets - Google 表格查询 : Adding Arithmetic Sequence Creating #N/A