首页 > 解决方案 > 谷歌表格。脚本。根据单元格值删除值,然后再次重新组织

问题描述

我不是脚本大师,我在这里和那里混合了一些代码,并提出了一个非常简洁的代码来清除基于另一个单元格值的所有行,然后将它们重新组织成没有留下一个空白行。

问题是,代码从第一行开始获取值,其中包含我想要保护的公式。

你能帮我解决这个问题吗?

我希望代码从第 6 行开始工作。

// Deleting Rows Based on Cell Values

//GLOBALS

var SS = SpreadsheetApp.getActive();
var SHEET = SS.getSheetByName("Assignments");
var RANGE = SHEET.getRange("A:F");


var DELETE_VAL = "Delivered";
var COL_TO_SEARCH = 5; //Zero is first

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

解决方案


当您清理从 A 到 F 的整个范围时,我评论了RANGE.clearContent。我添加了一个 else 条件,仅针对带有“已交付”的行清除

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

        } else {
          Logger.log("clear row" + (i+1));
          SHEET.getRange("C"+(i+1)+":F"+(i+1)).clearContent(); 

        }
      };

     //* RANGE.clearContent();

      var newRange = SHEET.getRange(1,1,newRangeVals.length, newRangeVals[0].length);
      newRange.setValues(newRangeVals);
    };

推荐阅读