粘贴值以用作Folmula(Google表格的应用脚本)

时间:2019-03-18 15:25:10

标签: google-apps-script google-sheets

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

=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)")

在apps脚本中,我使用以下代码将第二个公式粘贴为值,它也可以工作,但是在其单元格中,它显示为文本而不是公式。如果我手动删除=开头的表格,然后再次添加,则效果很好。这个想法是让它自己工作。有人可以帮忙吗?

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 :(得分:0)

Range#copyTo方法接受两个可选参数,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);
...