Вопрос:
Мне нужно скопировать строку шаблона в новый диапазон.
Ячейка шаблона содержит содержимое, в котором могут присутствовать формат, значения и функции.
Когда я копировал одну строку в несколько рядов, функции copyValuesToRange() и copyFormatsToRange() выглядели хорошо.
По сути мой код немного походил на это;
Template.copyFormatToRange(sheet, 1, lastColumn, lastRow + 1, lastRow + N); Template.copyValuesToRange(sheet, 1, lastColumn, lastRow + 1, lastRow + N);
Это копирует мою строку шаблона над N новыми строками, начиная с lastRow + 1.
Затем я заметил, что это не копирование функций в строке шаблона, например = SUM (B2: C2)
Я могу getFunctions() получить массив, содержащий функции в моей строке шаблона и setFunctions(), чтобы скопировать их в целевую ROW. Неудобство в том, что я должен переключиться на нотацию A1, которая добавляет время выполнения сценария. Важно отметить, что целевой диапазон, который задает setFunctions(), должен быть того же размера, что и массив. Это означает, что я должен запустить цикл for для копирования функций по N строкам.
Если я все-таки запускаю цикл for, я могу просто использовать
-
для loop copyTo()
вместо
- copyFormatToRange
- copyValuesToRange
- для цикла для setFunctions
Я пытался избежать использования copyTo(), потому что я решил, что для N определенного размера одиночные команды копируют ***** ToRange будет более эффективным, чем цикл for. Я застрял в цикле for или есть какой-нибудь умный способ, которым я могу скопировать функции из одной строки в ряд строк?
Лучший ответ:
Но вы можете использовать copyTo для копирования в “широкий” пункт назначения, вам не нужно зацикливаться. например
function copyTo() { var s = SpreadsheetApp.getActiveSheet(); s.getRange(‘A2:D2’).copyTo(s.getRange(‘A3:D10’)); }
Просто протестировал его, и он работает нормально.
Но если вы хотите, чтобы функции работали, вы должны использовать getFormulasR1C1 и setFormulasR1C1. Другая проблема, которая может возникнуть в результате установки формул после установки значений, заключается в том, что вам придется пропустить ячейку “чистые значения”, иначе вы перепишете их пустыми формулами. Использование copyTo действительно лучше всего подходит.