google-apps-script - 谷歌表格:从多列中删除数据
问题描述
我一直在尝试通过从不同列中删除特定值来清理文件。我从一列中执行此操作没有问题,但是如果我使用不同的列添加相同的脚本并运行这两个脚本,则不会正确删除值。
我对此很陌生,所以我的脚本可能是错误的。有一个更好的方法吗?还是我犯了一个错误?
function clean() {
var startTime = new Date().getTime();
var deleteSelectedRows = removeThenSetNewVals();
var runTime = (new Date().getTime() - startTime) / 1000;
Logger.log("Runtime is: " + runTime + " seconds");
};
function removeThenSetNewVals(){
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var range = sheet.getDataRange();
var pattern = new RegExp("value1|value2");
var columnToSearch = 5;
var newRangeVals = range.getValues().filter(r => r[0] && !pattern.exec(r[columnToSearch]))
range.clearContent();
var numRows = newRangeVals.length;
var newRange = sheet.getRange(1,1, numRows, newRangeVals[0].length).setValues(newRangeVals);
var maxRows = sheet.getMaxRows();
sheet.deleteRows(numRows + 1, maxRows - numRows);
};
function clean2() {
var startTime = new Date().getTime();
var deleteSelectedRows = removeThenSetNewVals2();
var runTime = (new Date().getTime() - startTime) / 1000;
Logger.log("Runtime is: " + runTime + " seconds");
};
function removeThenSetNewVals2(){
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var range = sheet.getDataRange();
var pattern = new RegExp("Value1|Value3");
var columnToSearch = 2;
var newRangeVals = range.getValues().filter(r => r[0] && !pattern.exec(r[columnToSearch]))
range.clearContent();
var numRows = newRangeVals.length;
var newRange = sheet.getRange(1,1, numRows, newRangeVals[0].length).setValues(newRangeVals);
var maxRows = sheet.getMaxRows();
sheet.deleteRows(numRows + 1, maxRows - numRows);
};
解决方案
您可以用一种.filter()
方法完成所有检查
function removeThenSetNewVals(){
let sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1'),
range = sheet.getDataRange(),
maxRows = sheet.getMaxRows(),
srchCol_1 = 2,
srchPatt_1 = new RegExp("Value1|Value2"),
srchCol_2 = 5,
srchPatt_2 = new RegExp("Value1|Value3"),
newRangeVals = range.getValues().filter(r => r[0] && !srchPatt_1.exec(r[srchCol_1]) && !srchPatt_2.exec(r[srchCol_2])),
numRows = newRangeVals.length;
range.clearContent();
sheet.getRange(1,1, numRows, newRangeVals[0].length).setValues(newRangeVals);
sheet.deleteRows(numRows + 1, maxRows - numRows);
}
替换pattern.exec(string)
为pattern.test(string)
?
推荐阅读
- python - 我可以使用多处理池来处理程序吗?
- isabelle - 从转换公式证明算法的正确性和终止的正确方法
- prestashop - 新服务器上的 Prestashop 友好 url 问题
- iis - Classic ASP Session.Variables 成本高吗?
- sql-server - 包含测试用例的 SQL Server .sql 文件
- python - 如何使用 BeautifulSoup 从重定向网站获取 html 内容并提供保护?
- google-bigquery - 使用 SUM 过滤结果时 Google BigQuery 相关子查询错误
- excel - 如何使我的条件格式公式更加动态?
- android - 通知图标无法在 Lollipop 上使用 Xamarin Android 正确显示
- java - 使用java中的按钮关闭对话框片段