Я использую вариант a script to generate random numbers in multiple columns of a spreadsheet, который поделился Тимом Купером в stackoverflow, который работает, выбирая любой диапазон смежных ячеек и запуская скрипт из меню onOpen.Javascript Wait for Dynamic Input
Вариант реализован как пользовательская функция в Таблицах Google и использует значения из столбца INPUT (A) в качестве максимальных значений для случайных чисел, сгенерированных в соседнем столбце OUTPUT (B), которые, в свою очередь, используются электронной таблицей для выведите последующие значения INPUT. Упрощенный пример:
Пользовательская функция считывает A1 и записывает случайное число между 0 и A1 (80) в B1. А2 затем вычисляется путем добавления 10 к B1 и т.д.
| A | B |
1 | 80 | 75 |
2 | 85 | 63 |
3 | 73 | 52 |
4 | 62 | 40 |
5 | 50 | 25 |
Проблема заключается в том, что электронные таблицы требуется некоторое время, чтобы заполнить следующее значение входного сигнала (в данном случае, А2), который будет производить ошибки при слишком медленно подавать вход для пользовательской функции для вычисления случайного значения в следующей строке.
Как есть, пользовательская функция представляет собой единый блок кода, который идентифицирует активный лист и диапазон ячеек. Затем он перебирает количество строк, извлекает входные значения, определяет случайные значения и записывает их в соседние ячейки.
function generate_random_numbers()
{
var sheet = SpreadsheetApp.getActiveSheet()
var range = sheet.getActiveRange()
var counter = 0
for (var y = 1; y <= range.getHeight(); y++)
{
counter = counter + 1
if (counter != 3)
{
var maximum = range.getCell(y, 1).getValue()
var random = (maximum != 0) ? Math.floor(Math.random() * maximum) + 1: 0
}
else
{
random = ""
counter = 0
}
range.getCell(y, 2).setValue(random)
}
}
Я посмотрел в расщеплении функции в отдельную часть, которая извлекает значения, с проверкой IsNaN для определения успеха и в случае неудачи SetTimeout функции для 100. К сожалению, Google Apps Script не кажется, поддержка комплектTimeout.
Я был бы признателен за предложения по созданию таблицы и скрипта, который использует динамические значения для совместной работы.
Я использовал бы '.getValue()' один раз, чтобы получить первое значение. Вы указали, что следующее значение столбца задается добавлением 10 к последнему значению столбца B. Таким образом, код имеет доступное ему значение. Вам не нужно извлекать его из листа. Если у вас есть формулы в столбце A, избавьтесь от них и просто установите значение столбца A из кода. –
@ Сэнди - пример упрощения. Фактические расчеты более сложны и включают в себя другие движущиеся части над несколькими ячейками. – user345360
Это может быть глупая, сумасшедшая идея, но если вы каким-то образом запустите JavaScript из HTML и каким-то образом используете запрос AJAX, есть способы подождать, пока ответ не вернется. –