Google Sheet Script Editor - Способы удаления нескольких вкладок, если имя вкладки не найдено в массиве - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь удалить все вкладки, если фактическое именование вкладок не существует в массиве.

Пример данных - май
Пример данных - апрель

Я предоставляю два примера, чтобы проиллюстрировать, как исходные данные извлекаются каждый месяц. В моем коде есть процесс извлечения API, который выполняет эту работу автоматически каждый месяц. Мой код ниже берет эти необработанные данные и разбивает их на отдельные вкладки в соответствии со столбцом «Поставщик»:

function SpreadProduct() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  // remove header row values from array
  values.shift();

  // data structure
  var ds = {};
  values.forEach(function(row) {
    var ven = row.shift(); // 1st col
    var product = row.shift(); // 2nd col

    ds[ven] = ds[ven] || {};
    ds[ven][product] = ds[ven][product] || [];
    // set value on ds

    ds[ven][product] = [parseInt(row[0]), parseInt(row[1])];
  });
  Logger.log(ds);
  // result object, for each vendor create array of rows
  // { A: [ row, row... ]... }
  var rs = {};
  Object.keys(ds).forEach(function(v) {
    rs[v] = rs[v] || [];
    Object.keys(ds[v]).forEach(function(p) {
      if (ds[v][p]) {
        rs[v].push([p, ds[v][p][0], ds[v][p][1]]);
      } else {
        rs[v].push([p, 0, 0]);
      }
    });
  });
  Logger.log(rs);
  // write rows
  Object.keys(rs).forEach(function(v) {
    var headers = [[v, 'Product'].join(' '), 'Sales', 'leftover'];
    // insert headers into rows for writing
    rs[v].unshift(headers);
    try {
      ss.insertSheet(headers[0]);
    } catch (e) {}
    var sh = ss.getSheetByName(headers[0]);
    sh.clear();
    sh.getRange(1, 1, rs[v].length, 3).setValues(rs[v]);
  });
}

Таблицы Google Sheets являются результатами приведенного выше кода.

Теперь у меня m trying to delete the tab if the following month doesn есть продавец предыдущего месяца.

Так, например, «Месяц апреля» не имеет «Apple» в столбце «Вендор», тогда как «Месяц Март» имеет «Apple».

Поэтому, когда я вычисляю таблицу за апрель, вкладка «Apple» была удалена

Есть ли способ сделать этот процесс программным способом в скрипте листа Google?

1 Ответ

0 голосов
/ 11 апреля 2019

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

function delTabs() {
  var ss=SpreadsheetApp.getActive();
  var shts=ss.getSheets();
  var kA=['Sheet118','Sheet119','Sheet120','Sheet121','Sheet122','Sheet123'];
  for(var i=0;i<kA.length;i++) {
    if(kA.indexOf(shts[i].getName())==-1) {
      ss.deleteSheet(shts[i]);//if not in array
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...