У меня есть марко, которое позволяет мне очистить все на моем листе, но я пытаюсь выполнить другое действие, чтобы очистить только определенные строки, но не все строки, в которых какой-либо столбец показывает слово «Да», будут очищены. Я разделяю это действие, назначая его кнопке.

Я был на stackoverflow и на некоторых веб-сайтах и ​​нашел несколько кодов, которые выглядят так, как будто они работают, но когда я попробовал это на своем листе, ничего не произошло. Не уверен, что проблема в моем диапазоне (я все еще не понимаю, в каких диапазонах) или в коде.

Чтобы дать представление:

  • Диапазоны, содержащие данные: A3: L100
  • Столбец, в котором указано «Да», - это столбец L3: L100.
  • Очистить только определенные строки, ничего не переформатируя в строках. Например, строка 1 не может быть очищена, строка 2 должна быть очищена, строка 3 не может быть очищена.
  • При очистке переместите данные строки 3 в строку 2, заменив данные строки 2.
  • Я работаю до 100 строк, поэтому диапазоны данных находятся в A3: L100

На данный момент, когда я запускаю скрипт, я не вижу, чтобы строка, содержащая «Да», была убрана. Я был бы очень признателен за помощь!

Ниже приведены мои текущие коды с веб-сайтов:

function Remove(){
      var depositid = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = depositid.getSheetByName("customer"); // sheet name is this "customer"
      var RANGE = sheet.getDataRange(); //do i have to fill in the ranges here?

      var DELETE_VAL = "Yes";  // Keyword to remove the row
      var COL_TO_SEARCH = 11; // Column L = 11

    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.getValue();
      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); //not sure if this is the culprit
    }
};
0
Ken_LYK 13 Июн 2020 в 05:37

1 ответ

Лучший ответ

Очистить строку, если в столбце 11 установлено значение «Да».

function Remove(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("customer");
  var vs=sh.getDataRange().getValues();
  vs.forEach(function(r,i){
   if(r[10]=='Yes') {//if column 11=="yes"
     sh.getRange(i+1,1,1,sh.getLastColumn()).clear();//clear current row
   }
 });
}

Массивы начинаются с нуля. Строки начинаются с единицы, поэтому i + 1 - это номер строки, когда ваш диапазон начинается с 1, а sh.getDataRange () получает все данные на листе.

2
Cooper 13 Июн 2020 в 05:12