Google Spreadsheets脚本可以删除找到字符串的任何行
Google Spreadsheets script to delete any rows where a string is found
我需要循环遍历工作表中的所有行/列,并删除包含某些单词的行。理想情况下,我会使用正则表达式搜索表单,但只要找到一个字符串就可以帮助我移动。我在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读取属性'length'",即使"word"存在于我的电子表格的列B中。如果我做一个更简单的版本,比如:
/* 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();
};
它开始删除每一行,即使"WordThatExistInOneRow"只显示在一行中。
您没有正确编写循环逻辑,您需要先循环该行中的每一行,然后循环该行的每一列,然后分配行索引进行删除,删除必须按相反的顺序执行。试试这个:
/* 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();
};
相关文章:
- 如何检查数据表是否有任何包含字符串的行并获取它的行索引
- Google Spreadsheets脚本可以删除找到字符串的任何行
- 打印字符串的行数
- Javascript 字符串换行
- Javascript 从字符串中删除不包含子字符串的行
- 匹配多行中的任何内容,然后是文本字符串
- 融合表 最大查询数 将数据设置为 0 IF 不返回任何行
- 这只会删除表中的第一行.我希望它删除我使用jQuery和html单击的任何行
- JavaScript正则表达式:删除出现字符串的行和后面的两行
- 我能让这个字符串多行吗
- Ui网格检查是否选择了任何行
- 在任何换行字符处分割字符串,但如果后面没有文本则忽略
- 带字符串的行长度
- 我如何知道是否有任何行选择在我的数据表
- 角度ng重复<李>字符串换行
- AngularJS -如何在ng-repeat和filter没有返回任何行时显示count 0
- 如何查找数组中特定字符串的行索引
- 从正文中获取字符串的行号
- 从文本区域获取带有字符串的行号(“行号”)
- Devexpress Aspx Gridview Control.不想在应用至少一个筛选器之前显示任何行