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

Javascript Google电子表格脚本,用于删除找到字符串的任何行,javascript,google-apps-script,google-sheets,spreadsheet,google-spreadsheet-api,Javascript,Google Apps Script,Google Sheets,Spreadsheet,Google Spreadsheet Api,我需要遍历工作表中的所有行/列,并删除包含某些单词的行。理想情况下,我会使用正则表达式在工作表中搜索,但只要找到一个字符串就可以帮助我移动。我在Stack Overflow上看到了很多关于查找和删除空行的帖子,但是找不到任何关于搜索整个工作表并在找到时删除一行的帖子 这就是我到目前为止所做的: /* Delete rows */ function deleteRows() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var r

我需要遍历工作表中的所有行/列,并删除包含某些单词的行。理想情况下,我会使用正则表达式在工作表中搜索,但只要找到一个字符串就可以帮助我移动。我在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();
};
/*删除行*/
函数deleteRows(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
var deleted=0;//计数器(如果我们向后循环,则不需要)
var regExp=new regExp('word');
对于(变量行=0;行0){
sheet.deleteRow(第+1行-已删除);
删除++;
}
}
SpreadsheetApp.flush();
};
然而,这只搜索B列,并抛出一个错误“TypeError:无法从null读取属性'length'”,即使在我的电子表格的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();
};
/*删除行*/
函数deleteRows(){
var sheet=SpreadsheetApp.getActiveSheet();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
var deleted=0;//计数器(如果我们向后循环,则不需要)
对于(变量行=0;行

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

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

/* 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();
};
/*删除行*/
函数deleteRows(){
var sheet=SpreadsheetApp.getActiveSheet();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
var toDelete=[];
对于(变量行=0;行=0;deleteRow--){
sheet.deleteRow(toDelete[deleteRow]+1);
}
SpreadsheetApp.flush();
};

如果没有正确编写循环逻辑,则需要先循环每一行,然后循环该行中的每一列,然后分配行索引以进行删除,删除操作必须按顺序执行。试试这个:

/* 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();
};
/*删除行*/
函数deleteRows(){
var sheet=SpreadsheetApp.getActiveSheet();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
var toDelete=[];
对于(变量行=0;行=0;deleteRow--){
sheet.deleteRow(toDelete[deleteRow]+1);
}
SpreadsheetApp.flush();
};

我认为这确实有效!然而,对于那个IF语句,我无法在其中使用正则表达式。我最终做了这件事;你认为这是测试正则表达式的最佳解决方案吗?(在本例中,我将查找以大写字母“a”结尾的所有单元格):
var re=new RegExp('a$,'gi');for(var row=0;rowregexp.test()的好地方
我认为这确实有效!但是对于IF语句,我无法在其中使用正则表达式。我最终这样做了;您认为这是测试正则表达式的最佳解决方案吗?(在本例中,我将查找以大写字母“a”结尾的所有单元格):
var re=new RegExp('a$,'gi');例如(var row=0;rowregexp.test()