首页 > 解决方案 > 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);
};  

非常感谢您提供的任何帮助

标签: google-apps-scriptgoogle-sheets

解决方案


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]);
};

推荐阅读