Скрипт Google Spreadsheets, copyTo vs copyValuesToRanges & copyFormatsToRanges

Вопрос:

Мне нужно скопировать строку шаблона в новый диапазон.

Ячейка шаблона содержит содержимое, в котором могут присутствовать формат, значения и функции.

Когда я копировал одну строку в несколько рядов, функции 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 действительно лучше всего подходит.

Оцените статью
TechArks.Ru
Добавить комментарий