Как удалить столбец, который содержит подстроку или является пустым? - PullRequest
1 голос
/ 31 октября 2019

Ниже мой код:

delCol отслеживает, сколько столбцов было удалено (чтобы выровнять итерации)

sheet - это активная электронная таблица

data - это массив значений из строки, которую я ищу, полученной с помощью SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("2:2").getValues();

function deleteRows() {
  var delCol = 0;
  var data = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("2:2").getValues();
  var sheet = SpreadsheetApp.getActiveSheet();
  for(var i = 0; i < data[0].length; i++) {
    if(data[0][i-delCol].indexOf("txt-to-delete") > -1 || data[0][i-delCol] == ""){
      sheet.deleteColumn(i - delCol + 1);
      delCol++;
    }
  }
}

Когда я запускаю этот код, каждый и каждый столбец удаляются.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Когда вы вызываете getValues(), 2D-массив данных, содержащихся в диапазоне, копируется в память среды выполнения ваших скриптов. После этого, если вы измените данные диапазона (используя вызовы, такие как setValues()), будут изменены данные на вашем листе, но не данные в вашем 2D-массиве.

Подробнеев частности, ошибка в вашем коде заключается в оценке условия оператора if . При доступе к 2D-массиву вы учитываете delCol, хотя на самом деле вам это не нужно. Ниже приведено исправление вашего кода:

function deleteRows() {
  var delCol = 0;
  var data = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("2:2").getValues();
  var sheet = SpreadsheetApp.getActiveSheet();
  for(var i = 0; i < data[0].length; i++) {
    if (data[0][i].indexOf("txt-to-delete") > -1 || data[0][i] == "") {
      sheet.deleteColumn(i - delCol + 1);
      delCol++;
    }
  }
}
0 голосов
/ 01 ноября 2019

Попробуйте это:

function runOne(s) {
  var s=s||'deleteme';//The substring
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange();
  var vA=transpose(rg.getValues());
  var d=0;
  for(var i=0;i-d<vA.length;i++) {
    var deleted=false;
    if(vA[i-d].join('').length==0) {
      vA.splice(i-d++,1);
      deleted=true;
    }
    var rs=vA[i-d].join(' ');
    if(!deleted && rs.indexOf(s)!=-1) {
      vA.splice(i-d++,1);
    }
  } 
  sh.clearContents();
  var oA=transpose(vA);
  sh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
}

function transpose(a) {
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}

Транспонирование Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...