粘贴值作为公式(Google表格的Apps脚本)

问题描述 投票:0回答:1

我需要过滤最新工作表中的数据(每天自动创建一个新数据)。我使用的公式是

=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();
google-apps-script google-sheets
1个回答
0
投票

Range#copyTo方法接受2个可选参数,CopyPasteType以及数据是否应该转置。您的代码无法复制为公式,因为您使用CopyPasteType枚举PASTE_VALUES。要复制公式,您应该使用PASTE_FORMULA

枚举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);
...
© www.soinside.com 2019 - 2024. All rights reserved.