Как избежать того, чтобы скрипт листа Google не записывал новое входное значение, если ячейки остаются выделенными?
Я заметил, что сценарий листа Google не выполняется должным образом, если неопытный пользователь оставляет ячейку ввода выделенной после ввода нового значения.
Это можно решить вручную, нажав клавишу ENTER на клавиатуре или другую клавишу, а затем запустив скрипт; поэтому я подумал, что способ имитировать ввод с клавиатуры, но я не уверен, есть ли лучшее решение.
В качестве примера я бы хотел, чтобы сценарий выполнял клавишу «ENTER» до и после выполнения функции тестового умножения, как показано на следующем тестовом листе:https://docs.google.com/spreadsheets/d/1TMjakai_5b_UHhXHSu3TWJeI7saAeQd64H6WYWDNHfE / edit?usp= совместное использование
Скрипт, который я использую для теста, следующий:
function Test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formS = ss.getSheetByName("Data");
var y = formS.getRange("A3").getValue();
var z = formS.getRange("B3").getValue();
var x = y * z;
formS.getRange("E3").setValue(x);
}
Кто угодно может попробовать это на листе Google: просто нажмите (один или два раза) на ячейку A3 или B3, оставив их выделенными, и нажмите кнопку, чтобы выполнить скрипт. Без щелчка за пределами ячейки или нажатия клавиши ВВОД с клавиатуры сценарий не будет записывать вновь введенное значение.
Есть ли способ лучше?
2 ответа
Хотя я не могу воспроизвести вашу проблему (см. Прилагаемый gif).
Могут возникнуть две потенциальные проблемы.
Либо нужно сбросить изменения:
function Test() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formS = ss.getSheetByName("Data");
var y = formS.getRange("A3").getValue();
var z = formS.getRange("B3").getValue();
var x = y * z;
SpreadsheetApp.flush();
formS.getRange("E3").setValue(x);
}
или вы неправильно поняли вывод скрипта.
А именно после того, как вы нажмете на кнопку один раз, выдает. Поэтому при повторном нажатии результат (
220
) просто не изменится, потому что результат
5*44
всегда будет таким же.
Иллюстрация на основе вашего кода:
Значение ячейки не будет обновлено, пока вы не нажмете клавишу ввода или не щелкнете другую ячейку (см. Раздел «Редактирование и форматирование электронной таблицы» ):
Редактировать данные в ячейке:
- Откройте электронную таблицу в Google Таблицах.
- Щелкните пустую ячейку или дважды щелкните непустую ячейку.
- Начни печатать.
- Необязательно: чтобы добавить еще одну строку в ячейку, нажмите ⌘ + Enter на Mac или Ctrl + Enter на Windows.
- Когда вы закончите, нажмите Enter .
Прикрепленную кнопку нельзя использовать для принудительного обновления этой ячейки, поэтому скрипт, вызываемый через интерактивное изображение / рисунок , не будет иметь этой информации.
Поэтому я бы предложил не запускать вашу функцию через прикрепленную кнопку, а использовать одно из следующего:
- Вызовите это через триггер onEdit (он не будет вызван, пока пользователь не нажмет клавишу ввода или не щелкнет другую ячейку, обновив ячейку).
- Вызовите это через настраиваемое меню (ячейка будет обновлена при щелчке по пункту меню).
Таким образом вы убедитесь, что выполняемая функция работает с обновленным значением.