Google Sheets Script для автоматического добавления (и обновления) списка всех листов в диапазон? - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь вытащить список всех листов и обновить этот список, если что-то изменилось в книге.

В моем листе Google я использую функцию ниже, чтобы поместить все листы в список:

=SHEETNAME()

С помощью приведенного ниже сценария я намереваюсь обновить его при событии изменения:

    function sheetName(e) {
      return SpreadsheetApp.getActive()
        .getSheets()
        .map(function(sheet) {
          return sheet.getName();
        });
    }

    /*Create a installable trigger to listen to grid changes on the sheet*/
    function onChange(e) {
      if (!/GRID/.test(e.changeType)) return; //Listen only to grid change
      SpreadsheetApp.getActive()
        .createTextFinder('=SHEETNAME\\([^)]*\\)')
        .matchFormulaText(true)
        .matchCase(false)
        .useRegularExpression(true)
        .replaceAllWith(
          '=SHEETNAME(' + (Math.floor(Math.random() * 500) + 1) + ')'
        );
    }

Настроил приведенный ниже триггер, который также работает при изменении: enter image description here

Тем не менее, к сожалению, список не обновляется автоматически.

Любая помощь высоко ценится!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вы должны установить свой устанавливаемый триггер, чтобы сделать это, выполните следующие действия:

1) Go для вашего проекта скрипта приложений

2) Нажмите Edit-> Current триггеры проекта

3) Нажмите «+ Добавить триггер»

4) Выберите:

  • Выберите, какую функцию запустить -> Имя функции

  • Выбор источника события-> Из электронной таблицы

  • Выбор типа события -> При изменении

Теперь я немного изменил вашу функцию onChange, потому что в противном случае вы вводите бесконечное число l oop

function sheetName(e) {
  return SpreadsheetApp.getActive()
    .getSheets()
    .map(function(sheet) {
      return sheet.getName();
    });
}

/*Create a installable trigger to listen to grid changes on the sheet*/
function onChange(e) {
  Logger.log(e.changeType)
  if (/GRID/.test(e.changeType)){
    SpreadsheetApp.getActive()
    .createTextFinder('=SHEETNAME\\([^)]*\\)')
    .matchFormulaText(true)
    .matchCase(false)
    .useRegularExpression(true)
    .replaceAllWith(
      '=SHEETNAME(' + (Math.floor(Math.random() * 500) + 1) + ')'
    );
  }
}

Docs

Это документы, которые я использовал для помочь вам:

0 голосов
/ 04 мая 2020

Ваше имя функции должно быть onEdit (e). Смотрите эту статью о триггерах от Google Dev.

https://developers.google.com/apps-script/guides/triggers

...