我需要循环遍历工作表中的所有行/列并删除包含某些单词的行。理想情况下,我会使用正则表达式搜索工作表,但只要找到一个字符串就可以帮助我前进。我在 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/