Макрос Javascript, чтобы остановить создание листа, если имя в списке не соответствует необработанным данным - PullRequest
0 голосов
/ 18 апреля 2019

Вчера кто-то помог мне создать макрос, который проходит по именам из списка (на листе с названием «Поставщики») и создает новый лист для каждого имени (дубликат листа с именем «Необработанные данные»). Столбец A включенновый лист фильтруется по имени, а электронная таблица также называется тем же именем.

Теперь мне нужно отредактировать макрос, чтобы посмотреть на имена в списке («Поставщики») и сравнить его со столбцом.A в «Сырых данных». Если имя отсутствует в «Сырых данных», мне не нужно создавать новый лист. Я относительно новичок в кодировании и не обладаю знаниями для его создания.

Я хотел бы вставить эту функцию в следующий код:

function factory() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var supSheet = ss.getSheetByName('Suppliers');
    var supNames = supSheet.getRange(1, 1, supSheet.getLastRow(),
        1).getValues();
    supNames = supNames.map(function (el) {
        return el[0];
    });

    supNames.forEach(function (name, i) {
        doTheWork(ss, name, i, supNames);
    });
}

function doTheWork(ss, name, i, allNames) {
    if (!name || name.length == 0) return;

    ss.getSheetByName('Raw Data').activate();
    var nSheet = ss.duplicateActiveSheet();
    nSheet.setName(name);

    nSheet.getRange('A:L').activate();
    nSheet.getRange('A:L').createFilter();
    nSheet.getRange('A1').activate();

    var values = [''].concat(allNames);
    values.splice(i + 1, 1);
    var criteria = SpreadsheetApp.newFilterCriteria()
        .setHiddenValues(values)
        .build();

    nSheet.getFilter().setColumnFilterCriteria(1, criteria);

    nSheet.getRange('G:G').activate();
    nSheet.getRange('C1').activate();
    nSheet.getFilter().sort(3, true);
}

1 Ответ

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

Измените заводскую функцию на эту.

function factory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var supSheet = ss.getSheetByName('Suppliers');
  var supNames = supSheet.getRange(1, 1, supSheet.getLastRow(), 1).getValues();
  supNames = supNames.map(function(el) {
    return el[0];
  });
  var rdSheet = ss.getSheetByName('Raw Data');
  var rdNames = rdSheet
    .getRange(1, 1, rdSheet.getLastRow(), 1)
    .getValues()
    .map(function(row) {
      return row[0];
    });
  supNames.forEach(function(name, i) {
    if (rdNames.indexOf(name) != -1) doTheWork(ss, name, i, supNames);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...