在Google表格中使用列名称IMPORTRANGE查询

时间:2016-06-07 20:47:13

标签: google-sheets

我使用的脚本允许我在同一Google 工作簿中的工作表的QUERY中替换Col#格式的列名。

但是当我使用IMPORTRANGE从另一个google工作簿中调用QUERY时,我收到此错误:找不到范围(第11行,文件" SQLfunction")

我的呼叫小区看起来像这样:

package main

import (
    "fmt"
    "os"
)

func main() {
    var foo string
    var found bool
    if true {
        foo = "foo"
    } else {
        foo, found = os.LookupEnv("GOPATH")
        if !found {
            fmt.Printf("who cares.\n")
        }
    }
    println(foo)
}

STATS!D33是这样的:

=QUERY(
  IMPORTRANGE("long-hairy-key","MASTER!A:BN"),
  IMPORTRANGE("long-hairy-key",SQL("MASTER!A:BN",STATS!D33,true)),
  1
 )

SQL函数来自这里: https://productforums.google.com/forum/#!topic/docs/vTgy3hgj4M4

有人可以推荐我如何调整脚本以适应IMPORTRANGE吗?

2 个答案:

答案 0 :(得分:0)

引用的SQL()自定义函数无法访问外部电子表格。您必须调整SQL()自定义函数,以使其能够访问外部电子表格或重新设计公式。

如果您要重新设计公式,一种方法是将外部数据的导入移出“主公式”。为此,

  1. 首先,获取外部范围。添加新工作表(假设其名称为Sheet1)并将以下公式添加到A1 =IMPORTRANGE("long-hairy-key","MASTER!A:BN")
  2. 其次,用下一个替换“主要公式”:
  3. =QUERY(
       Shee1!A:BN,
       SQL("Sheet1!A:BN",STATS!D33,true)),
       1
     )
    

答案 1 :(得分:0)

您可以使用公式生成sql语句。

Step1。使用importrange仅获取标头。

将此公式粘贴到Sheet1 A1:

=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))

需要转置数据以制作字段名称的垂直列表。

Step2。添加列号。

将此公式粘贴在B1:

=ARRAYFORMULA(ROW(OFFSET(A1,,,counta(A:A))))

在此步骤中,您将获得表格,如下所示:

  A               B
1 FieldName1      1
2 FieldName2      2
3 FieldName3      3
4 FieldName4      4
5 FieldName5      5

Step3。合并SQL语句。

使用C列表示要在查询中选择哪些列:

  A               B    C
1 FieldName1      1    1
2 FieldName2      2
3 FieldName3      3    1
4 FieldName4      4
5 FieldName5      5    1

在自由单元格(F1)中使用此公式:

="select Col"&JOIN(", Col",FILTER(B:B,C:C=1))

就我而言,这个公式给出了字符串select Col1, Col3, Col5,这可以在查询公式中使用:

=query(IMPORTRANGE("long-hairy-key","MASTER!A:BN"), F1)

使用其他列可使您的SQL更智能,添加where子句,order bylabel等。

<强>更新

因此,这个逐步解决方案并没有解决重新排列的问题。

诀窍是使用列名列表并将其保存为值:

  1. 粘贴第1步中的公式:=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
  2. 复制→转到粘贴空间→值
  3. 然后,您需要完成步骤1和2,以便列出当前的数字。

    然后你实际上有两张桌子。第一个将保存实际字段列表和字段编号,由步骤1和步骤2中的公式生成。这是Table1

      A               B
    1 FieldName1      1
    2 FieldName2      2
    3 FieldName3      3
    4 FieldName4      4
    5 FieldName5      5
    

    第二个表将具有SQL设置。这里是Table2 ::

      A               B    C
    1 FieldName1      1    1
    2 FieldName3      3
    3 FieldName2      2    1
    4 FieldName4      4
    5 FieldName5      5    1
    

    其中的字段名称必须作为值输入。 B列将包含vlookup函数:

    = vlookup(A1, table1!A:B, 2, 0)
    

    甚至ArrayFormula

    = arrayformula(vlookup(offset(A1,,,counta(A1:A)), table1!A:B, 2, 0))
    

    这就是你需要开始的一切。然后让你的查询变得更聪明。