【问题标题】:Google sheets script : using multiple values with IndexofGoogle 表格脚本:使用 Indexof 的多个值
【发布时间】:2021-06-18 09:16:56
【问题描述】:

我正在使用脚本来删除包含特定值的行。它工作正常,但我希望能够添加多个值来查找。 在此示例中,我希望删除第 7 列中包含“housse”或“accessoires”的每一行。 非常感谢您的帮助!

var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Sheet1");
var RANGE = SHEET.getDataRange();
var VALUES = RANGE.getValues();
var DELETE_VAL = "housse" || "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);
};  

【问题讨论】:

    标签: string google-apps-script google-sheets


    【解决方案1】:

    改变

    var DELETE_VAL = "housse" || "accessoires";
    

    var DELETE_VAL = ["housse", "accessoires"];
    

    if(rangeVals[i][COL_TO_SEARCH] !=DELETE_VAL){
    

    if(DELETE_VAL.indexOf(rangeVals[i][COL_TO_SEARCH]) === -1){
    

    看看这是否有效?

    编辑:我的错!我没有意识到您正在寻找部分匹配项。尝试将脚本文件“CLEANUP.gs”的内容替换为

    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 sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
    var range = sheet.getDataRange();
    var pattern = new RegExp("Connectique|Adaptateur"); 
    var columnToSearch = 6;
    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);
    }

    看看有没有帮助?

    【讨论】:

    • 非常感谢您的回答,我试过您的更改,但行没有被删除
    • 您能分享一份您的电子表格副本,以便我仔细查看吗?
    • 当然,你可以在这里看到我想要做什么:docs.google.com/spreadsheets/d/… 谢谢!
    • 太棒了!非常感谢。在 50 秒内清除了 30k 行 :) 脚本运行后有什么方法可以删除空行吗?而不是让它们空白?
    • @Antoine:我编辑了代码,现在应该删除底部的空行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多