我想尝试清除准备删除的行,这些行包含Google表格中的特定单词,我遇到的问题是删除行1到1的脚本,如果您有很多行,可能要花很长时间进行搜索,如果我可以仅突出显示所有这些行并清除数据(如果该行可以保留特定单词的话),那将会更快,因为我之后可以对数据进行排序
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Copy of TBC Sort');
var r = s.getRange('C3:C400');
var v = r.getValues();
for(var i=v.length-1;i>=0;i--)
if(v[0,i]=='Delete Row')
s.deleteRow(i+1);
};
答案 0 :(得分:2)
您可以改用clearContent()
。有关更多详细信息,请访问Apps脚本网站here。
显示的示例是
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("A1:D10");
range.clearContent();
答案 1 :(得分:1)
如果数据包含“删除行”,则删除行。
loc
我已经使用function findAndDeleteRow() {
var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Copy of TBC Sort');
var r = s.getRange('C3:C400');
var find = r.createTextFinder('Delete Row').findAll().reverse();
if (find.length > 0) {
for (i = 0; i < find.length; i++) {
s.deleteRow(find[i].getRow());
}
}
}
来查找包含字符串“ Delete Row”的每一行(这比循环遍历一组值比较每一行要快)。这会将所有范围推入createTextFinder()
中的数组。然后,我们使用var find
反转数组,以便从下至上删除行。我加入了reverse()
语句只是为了检查数组中是否有要处理的项目,然后我们有一个if
循环遍历数组中的每个项目,并将行传递给{ {1}}。
注意:请确保您的 for
在电子表格中是有效范围,否则 deleteRow()
将挂起。
答案 2 :(得分:1)
以马里奥所说的为基础,最快的方法是复制数据,清除范围并粘贴所需的数据
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Copy of TBC Sort');
var data = s.getDataRange().getValues();
var results = [];
for(var i=v.length-1;i>=0;i--)
if(data[0,i]=='Delete Row') continue;//skips these rows
result.push(data[i]);
};
s.getDataRange().clear();
s.getRange(1, 1,results.length, results[0].length).setValues(results);
}
删除行时间太长