Как я могу не выполнять функцию при открытии листа?

Я сделал функцию в таблицах Google, которая запрашивает внешнюю ссылку. Я называю функцию так:

=functionimade(params)

Но я всегда открываю лист, вызывается функция и делается запрос. Как я могу это решить? Я хочу сделать запрос один раз

1 ответ

Решение

Ответ:

К сожалению, это невозможно.

Дополнительная информация:

Когда пользовательская функция вызывается в листе, значение ячейки является возвращением функции - это формула, которая ее вызывает. Возвращаемое значение функции вычисляется каждый раз, когда лист открывается, потому что единственное, что было сохранено, - это формула; не данные.

Кроме того, согласно документации, пользовательские функции не поддерживают.set*() методы SpreadsheetApp:

Служба электронных таблиц: только для чтения (может использовать большинство методов get*(), но не set*()).

Это означает, что вместо этого невозможно установить значение ячейки напрямую, используя .getRange(cell).setValue(functionimade(params)) поскольку объем пользовательских функций не позволяет вам установить его напрямую.

Обходной путь:

В конце вашей функции, вместо того, чтобы возвращать значение, вы можете установить содержимое с помощью вышеупомянутого .setValue() только вам нужно будет указать ячейку в самой функции:

function functionimade(params) {
  var myReturnValue = // some cool code here

  var cell = 'A1'; // << change this
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(cell)
                                                        .setValue(myReturnValue);
}

Надеюсь, это поможет вам!

Ссылки:

Связанные вопросы:

Другие вопросы по тегам