Удалить только определенные значения, а не все значения - PullRequest
1 голос
/ 05 июня 2019

Скрипт удаляет все значения в выбранных ячейках. Я хотел бы написать в исключениях, если значение является чем-то, что я не хочу удалять.

Ничего не пробовал, потому что я не так хорош.

function Gtown() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('O38:P39').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A38:B39').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('O26:P27').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('I26:J27').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('G26:H27').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A26:B27').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('O16:P17').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('I16:J17').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('G16:H17').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A16:B17').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('O6:P7').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('I6:J7').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('G6:H7').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A6:B7').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};

Нет сообщений. Я хочу удалить только определенные значения.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

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

function clearSelectedLocations() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rA=['O38:P39','A38:B39','O26:P27','I26:J27','G26:H27','A26:B27','O16:P17','I16:J17','G16:H17','A16:B17','O6:P7','I6:J7','G6:H7','A6:B7'];
  var rgA=sh.getRangeList(rA).getRanges();
  for(var i=0;i<rgA.length;i++) {
    rgA[i].clear({contentsOnly: true, skipFilteredRows: true});
  }
}

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

function clearSelectedLocations() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues()
  for(var i=0;i<vA.length;i++) {
    if(sh.isRowHiddenByFilter(i+1)) {
      continue;
    }else{
      for(var j=0;j<vA[i].length;j++) {
        if(vA[i][j].toString()=="On Duty") {
          sh.getRange(i+1,j+1).clear({contentsOnly: true});
        }
      }
  }
}

Если вам нужно очистить более одного значения:

function clearSelectedLocations() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var clA=["On Duty"];
  for(var i=0;i<vA.length;i++) {
    if(sh.isRowHiddenByFilter(i+1)) {
      continue;
    }else{
      for(var j=0;j<vA[i].length;j++) {
        if(clA.indexOf(vA[i][j].toString())>-1) {
          sh.getRange(i+1,j+1).clear({contentsOnly: true});
        }
      }
  }
}
0 голосов
/ 05 июня 2019

Прежде всего, пожалуйста, используйте цикл!Прямо сейчас ваш скрипт очень «тяжелый»:

function Gtown() {

  var ss   = SpreadsheetApp.getActive();
  var rl   = ss.getRangeList(['A1:A5','B1:B5']); //put any Range references here;
  var rs   = rl.getRanges();

  var opts = {contentsOnly: true, skipFilteredRows: true};

  rs.forEach(function(range){
    range.clear(opts);
  });

}

Затем внутри forEach «цикла» вместо безусловной очистки оберните метод clear() в оператор if...else (RangeДоступ к значениям можно получить с помощью getValue() или getValues() вызовов методов)

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