Скрипт Google Sheets для возврата имени листа не будет автоматически обновляться при создании нового листа

Я написал скрипт в Google Sheets, чтобы вернуть имя данного листа (см. Ниже).

Функция записывается в итоговый лист, где входными данными является индекс требуемого листа. У меня есть все функции, предварительно написанные, например.

A1 = GetSheet(1) B1 = GetSheet(2) C1 = GetSheet(3) и т.д.

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

Есть ли способ автоматического обновления ячеек при добавлении нового листа без повторного ввода функции?

Извините, если я упустил что-то очевидное, я очень новичок в этом!

function GetSheet(input)
{
  var spread = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var sourceIndex = sourceSheet.getIndex();
  var nextIndex = sourceIndex + 1;  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(ss.getSheets()[input]);        
  var active = ss.getActiveSheet();
  var name = active.getName();                                   
  return name
}

person Owen Midha    schedule 13.11.2017    source источник
comment
Первые 4 строки вашей функции, похоже, ничего не делают для генерации возвращаемого значения. Также взгляните на это: событие электронной таблицы change (developers.google. com/apps-script/guides/triggers/events#change), чтобы зафиксировать изменения и запустить скрипт для обновления. Кроме того, почему бы сначала не получить названия всех таблиц, а затем вставить их в сводную таблицу с помощью range.setValues() (developers.google.com/apps-script/reference/spreadsheet/)   -  person Dean Ransevycz    schedule 14.11.2017
comment
@DeanRansevycz Спасибо, что заметили первые 4 строки, я удалю. Из старой версии. Я посмотрю на change. Проблема с поиском имен листов в первую очередь заключается в том, что я не узнаю, что это такое, пока они не будут созданы!   -  person Owen Midha    schedule 15.11.2017


Ответы (1)


Не меняется, потому что их входы не меняются

Причина, по которой ваши пользовательские функции ничего не возвращают при создании другого листа, заключается в том, что входными данными для таких функций обычно являются ссылки на ячейки, и функции будут пересчитываться при изменении значения этих ссылок на ячейки. Но ваши входные данные - это просто числа (индексы массива allSheets() и создание других листов не меняют ни один из их входных данных, поэтому у них никогда не будет возможности запуститься. Я не думаю, что создание нового листа вызовет onChange I думаю, что это единственные вещи, которые вызывают событие onChange.

EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, FORMAT и ДРУГИЕ

По общему признанию, я не знаю, что такое ДРУГОЕ, так что, возможно, есть надежда.

person Cooper    schedule 13.11.2017
comment
Спасибо, это имеет большой смысл. Я добавил изменение случайного числа из здесь и это теперь обновляет мою функцию - person Owen Midha; 16.11.2017