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

时间:2015-09-03 17:47:15

标签: google-sheets array-formulas gs-vlookup

我有一个Google电子表格,基本上是一个键/值对字典。钥匙是独一无二的在第二张表中,我需要为字典中的每个键添加一行或多行以及一些数据。在这篇文章中,我还需要报告每个密钥的正确值。

为此,我尝试将ARRAYFORMULA函数与第二张表的第一行上的许多其他函数组合,以避免(如果可能)需要在值列的所有行上复制相同的公式。

到目前为止,QUERY和FILTER都没有工作。

QUERY要求所有数据(包括WHERE谓词的参数)驻留在单个工作表上。在我的情况下,过滤键将在第二张纸上,而词典在第一张纸上。所以这根本不能用。

FILRE似乎有一种奇怪的(对我来说)行为,当它们与ARRAYFORMULA一起使用时,没有它。

您可以查看我的测试Google表格 here或带ARRAYFORMULA的快照(B栏),没有它(C栏)和我想要的(D栏):

KEY sheet with the key/value pairs

DATA sheet with the data for the keys

距离pnuts还有一步之遥。解决方案提供了完美的"结果没有" N / A"细胞:

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

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

3 个答案:

答案 0 :(得分:1)

在第3行中,请尝试:

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

答案 1 :(得分:0)

尝试:

using Microsoft.SharePoint.Client;
namespace Helpers
{
    public static class SharePoint
    {
        public static List<ListItem> GetItems(List list, CamlQuery query = null)
        {...}
    }
}

只要在col A中输入值,就应该获得密钥。

答案 2 :(得分:0)

您可以使用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();
};