如何在 Google 电子表格中使用 ARRAYFORMULA + FILTER?

How to use ARRAYFORMULA + FILTER within Google Spreadsheet?

我有一个 Google spreadsheet,基本上是 key/value 对的字典。密钥是唯一的。一秒钟 sheet 我需要为字典中的每个键添加一行或多行,其中包含一些数据。在这个 sheet 中,我还需要报告每个键的正确值。

为此,我尝试将 ARRAYFORMULA 函数与第二行的第一行中的许多其他函数结合使用 sheet 以避免(如果可能)将相同的公式复制到所有值列的行数。

到目前为止,QUERY 和 FILTER 都不起作用。

QUERY 要求所有数据(包括 WHERE 谓词的参数)驻留在单个 sheet 上。在我的例子中,过滤键在第二个 sheet 上,而字典在第一个上。所以这个根本不能用

FILTER 与 ARRAYFORMULA 一起使用和不与它一起使用时(对我而言)似乎有一种奇怪的行为。

你可以看看我的测试Google Sheet here 或此处使用 ARRAYFORMULA(B 列)、不使用它(C 列)以及我想要获得的内容(D 列)的快照:

从 pnuts 的解决方案再进一步提供 "perfect" 结果,但没有 "N/A" 个单元格:

=ARRAYFORMULA(IF(A3:A="";"";VLOOKUP(A3:A;KEYS!A1:B;2;FALSE)))

当然对性能有重大影响,因为 VLOOKUP 在第二个 sheet 中对每一行 运行 一次(这也是我尝试使用 FILTER 的原因). 即使使用当前链接的示例 sheet,这些性能也很低,这真的很瘦。

第 3 行请尝试:

=ArrayFormula(vlookup(A3:A;KEYS!A:B;2;0))

尝试:

=ARRAYFORMULA(IF(LEN(A3:A); VLOOKUP(A3:A;KEYS!A1:B;2;FALSE);))

只要在 A 列中输入值,就应该得到键。

您可以使用 From spreadsheet - On change 事件触发器来调用如下代码:

function CopyPasteWastageRows() {
    var spreadsheet = SpreadsheetApp.getActive().getSheetByName("<<Sheet-Name>>");
    spreadsheet.getRange('Q2').activate();
    var currentCell = spreadsheet.getCurrentCell();
    spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
    currentCell.activateAsCurrentCell();
    spreadsheet.getRange('Q2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    spreadsheet.getRange('Q2').activate();
};