Вставка значений для работы в виде Folmula (скрипт приложения для Google Sheets) - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно отфильтровать данные из последнего листа (новый создается каждый день автоматически).Формула, которую я использую:

=FILTER('S&T 18/3/2019'!N:N;ISBLANK('S&T 18/3/2019'!N:N)=FALSE)

И она работает, поэтому в другой ячейке я написал другую формулу, которая обновляет первую:

=CONCATENATE("=filter('S&T ";TEXT(TODAY();"d/m/yyyy");"'!N:N;ISBLANK('S&T";TEXT(TODAY();"d/m/yyyy");"'!N:N)=FALSE)")

В скрипте приложенийЯ использую следующий код для вставки второй формулы в качестве значений, и она также работает, но в своей ячейке она отображается как текст, а не как формула.Если я вручную удаляю = из начала, а затем добавляю его снова, он работает отлично.Идея в том, чтобы он работал самостоятельно.Кто-нибудь может помочь?

var spreadsheet = SpreadsheetApp.getActive();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Test Filtro'), true);
    spreadsheet.getRange('D1').activate();
    spreadsheet.getRange('D1').copyTo(spreadsheet.getRange('E2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    spreadsheet.getRange('E2').activateAsCurrentCell();

1 Ответ

0 голосов
/ 18 марта 2019

Метод 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);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...