google-apps-script - Google表格脚本:删除大量包含特定数据的行
问题描述
我正在尝试构建一个脚本来删除包含特定数据的大量行(工作表有 +80k 行)。在此示例中,我尝试删除第 7 列中包含值“Accessoires”的所有行。我对此非常了解,但花了相当长的时间在论坛上到处寻找解决方案。到目前为止,我想出了这段代码,但这不起作用任何想法非常感谢:)
var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Sheet1");
var RANGE = SHEET.getDataRange();
var VALUES = RANGE.getValues();
var DELETE_VAL = VALUES.indexOf("Accessoires");
var COL_TO_SEARCH = 6;
function main() {
var startTime = new Date().getTime();
var deleteSelectedRows = removeThenSetNewVals();
var runTime = (new Date().getTime() - startTime)/1000;
Logger.log("Runtime is: "+runTime + " seconds");
};
function removeThenSetNewVals(){
var rangeVals = RANGE.getValues();
var newRangeVals = [];
for(var i = 0; i < rangeVals.length; i++){
if(rangeVals[i][COL_TO_SEARCH] !=DELETE_VAL){
newRangeVals.push(rangeVals[i]);
};
};
RANGE.clearContent();
var newRange = SHEET.getRange(1,1,newRangeVals.length, newRangeVals[0].length);
newRange.setValues(newRangeVals);
};
非常感谢您提供的任何帮助
解决方案
DELETE_VAL = VALUES.indexOf("附件"); 是一个数字。RangeVals[i][COL_TO_SEARCH] 是文本字符串。
您还希望计算部分匹配。所以修复是制作一个你匹配的字符串
var DELETE_VAL = "housse"; // a string
然后说(使用 toString 避免在数字上说 indexOf 并出现错误)
if (rangeVals[i][COL_TO_SEARCH].toString().indexOf(DELETE_VAL) == -1){// text to avoid not found
newRangeVals.push(rangeVals[i]);
};
推荐阅读
- scikit-learn - scikit-learn 的 cross_val_score 中的“分数”是什么意思?是指准确度吗?
- npm - NPM - 如何安装指向 git URL 的传递依赖项?
- javascript - 以编程方式创建 js 文件并编辑现有的 js 文件
- c++ - 换行文本上的 C++ 合并排序错误中断
- css - 带有轮廓边框的 Material-ui 的 Textfield 组件内部的额外行
- sql-server - 什么可能导致这种“聚集索引搜索”花费这么多时间
- github - 简单的 GitHub Actions 工作流无法启动
- javascript - 在不污染全局命名空间的情况下,在另一个 Web 组件中定义一个 Web 组件
- php - 如何在共同加入的数据库列中搜索字符串
- python - 仅通过在 python 中说出应用程序名称来打开应用程序