Как, после удаления строк, содержащих определенный текст, удалить любую соседнюю строку, если она не пуста - PullRequest
0 голосов
/ 02 января 2019

Я пишу скрипт для очистки электронных таблиц. Эти листы создаются автоматически и содержат много несущественной информации. Мне нужно отсканировать заголовок, удалить эту строку, а затем удалять каждую дополнительную строку до тех пор, пока не придет к строке, которая полностью пуста, непосредственно перед следующей группой заголовков:

Я могу использовать приведенный ниже код для сканирования целевого текста и удаления строки. Я могу регистрировать каждую строку, которую я удалил: Logger.log («удаленные строки:» + toDelete); Но у меня проблемы с написанием остальных

function deleteRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var toDelete = [];
  var deleteExtra = [];

var re = new RegExp('(Member Service Associate|Contract Work)','gi'); 
  for (var row = 0; row < values.length; row++) { 
  for(var column = 0;column<values[row].length;column++){ 
  if (re.exec(values[row][column])){
  toDelete.push(row); } } }


  for(var deleteRow = toDelete.length-1; deleteRow >= 0;deleteRow--){
    sheet.deleteRow(toDelete[deleteRow]+1);
}    
Logger.log("deleted rows: " + toDelete );
SpreadsheetApp.flush();
};

Выход логгера:

[19-01-02 10: 16: 13: 732 PST] удаленные строки: 33,45,51,54,86,89,101,103,125,127,145,148,171,175,200,208,219,222,262,269,275,280,310,313,324,332,347,352,363,366,372,374,385,388

1 Ответ

0 голосов
/ 02 января 2019

Удалить ненужные и соседние строки

Не имея возможности видеть свои электронные таблицы, и вы говорите, что хотите продолжать удалять строки, пока не столкнетесь с пустой строкой.

function deleteUnwantedAndAdjacentRows() {
  var sh=SpreadsheetApp.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var d=0;//deleted count
  var kd=false;//keep deleting
  var re = new RegExp('(Member Service Associate|Contract Work)','gi'); 
  for (var i=0;i<vA.length;i++) { 
    if(vA[i].join("") && kd){//if something in this row and keep deleting is still true
      sh.deleteRow(i-d+1);//then delete
      d++;//increment delete count
      countinue;//go on to nextrow
    }else{//if row is blank
      kd=false;//quit deleting
    }
    for(var j=0;j<vA[i].length;j++){ 
      if(re.exec(vA[i][j])){
        sh.deleteRow(i-d+1);
        d++;
        kd=true;
      } 
    } 
  }    
}

Обязательно проверьте это на том, что вы можете себе позволить испортить.

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