Метод Range#copyTo
принимает 2 необязательных аргумента: CopyPasteType
и необходимость переноса данных.Ваш код не может быть скопирован как формула, потому что вы используете CopyPasteType
enum PASTE_VALUES
.Чтобы скопировать формулу, вы должны использовать PASTE_FORMULA
.
Enum CopyPasteType
PASTE_NORMAL Enum Paste values, formulas, formats and merges.
PASTE_FORMULA Enum Paste the formulas only.
PASTE_VALUES Enum Paste the values ONLY without formats, formulas or merges.
Ваш код будет выглядеть следующим образом:
...
var destCell = spreadsheet.getRange("E2");
spreadsheet.getRange("D1").copyTo(destCell, SpreadsheetApp.CopyPasteType.PASTE_FORMULA, false);
destCell.activateAsCurrentCell();
...
Поскольку вы пытаетесь выполнить «двойную вставку» (ваши исходные данные - это формула, которая создает формулу при ее оценке, и вы хотите написать созданную формулу), вам необходимо вставить значениеисходной ячейки, затем повторно скопируйте вывод (нужную формулу) и вставьте его в виде формулы:
...
const AS = SpreadsheetApp.CopyPasteType;
var destCell = spreadsheet.getRange("E2");
spreadsheet.getRange("D1").copyTo(destCell, AS.PASTE_VALUES, false); // Compute the desired formula, via formula-to-value conversion.
SpreadsheetApp.flush(); // Force the first copy to occur.
destCell.copyTo(destCell, AS.PASTE_FORMULA, false); // Activate the computed formula.
destCell.activateAsCurrentCell();
...
Вы можете полностью избежать первой копии диапазона, построив формулу в сценарии.
...
var TODAY = Utilities.formatDate(new Date(), "your timezone", "your format string here");
var myFormula = "=FILTER('S&T " + TODAY + "'!N:N;ISBLANK('S&T " + TODAY + "'!N:N)=FALSE)";
destCell.setFormula(myFormula);
...