Если у вас будет 100 предметов, то, как вы говорите, это будет медленно.Что является медленным, так это доступ к самой электронной таблице (то, что быстрее всего, это манипулирование в памяти каждой другой «командой», которая не имеет доступа к электронной таблице).Так, например, если вы напишите сценарий для выполнения ss.getRange ("A3"). GetValue () сто раз, тогда это будет медленно.
Если бы я подошел к вашей проблеме со сценариями, яизвлек бы все значения, которые есть в электронной таблице, только один раз (конечно, на onEdit), используя что-то вроде var values = sheet.getDataRange().getValues();
. Это создаст двумерный массив типа
[
[A1, B1, C1, ... L1 ],
[A2, B2, C2, ... L2 ],
...
...
[A100, B100, C100, ... L100]
]
У вас есть «внешний» массив, который содержит несколько «внутренних» массивов, каждый из которых представляет строку листа, от первой † строки до последней строки, где есть любая ячейка, содержащая данные, и такой же ширины, как первый † столбец допоследний столбец с любой ячейкой с данными (каждая пустая ячейка между ними также будет в массиве, который будет представлен пустой строкой ''
)
† .getDataRange () определяет диапазон от первой до последней-с данными, как указано выше.Вы также можете использовать другие определения диапазона, например, getRange («A1: L100»);тем не менее, 2D-характер этого диапазона и, следовательно, .getValues () все еще будет там.
Тогда вам придется манипулировать этим 2D-массивом в скрипте приложений Google.Вы можете выполнить поиск в Google для цикла в javascript ИЛИ в скрипте приложений Google , чтобы показать вам код, который будет выглядеть следующим образом:
for (var i = 0; i<values.length; i ++){
// YOUR CODE to manipulate this for..loop
}
Переменная i в этой переменной for..loop увеличивает каждый циклчерез ваш код;таким образом, это аналог каждой строки (за исключением того, что он начинается с нуля, т.е. на единицу меньше строки, начинающейся с 1)Поэтому вы будете использовать i для ссылки на каждую строку в значениях.И у вас будет, во втором измерении, 0 как ColA, 1 как ColB и т. Д. До 11 как ColL, например, в четвертом цикле я буду равен 3, поэтому values[i][1]
будет ссылаться на ячейку B4.
Таким образом, содна или несколько строк кода в for..loop, используя i, вы можете сравнить 100 (или много больше) строк.
Вы бы сделали if
сравнение как часть ВАШЕГО КОДАв течение ...Когда сравнение if находит совпадение, вы должны остановить цикл, используя оператор break .Это исправит переменную i, которую вы затем сможете использовать в большем количестве скриптов ниже for..loop для обратной записи в электронную таблицу.Для этого я хотел бы рассмотреть возможность использования сценария google apps range.offset
(Примечание: ваш фактический вариант использования может быть более сложным, чем я указал выше, особенно в коде, который вам понадобитсянаписать для достижения требуемого сравнения (if
внутри цикла). Однако вашему решению почти наверняка потребуется вызов getValues () к электронной таблице, чтобы не делать 100 вызовов getValue (), и, таким образом, вам придетсяработа с 2D массивами.)