我使用的脚本允许我在同一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吗?
答案 0 :(得分:0)
引用的SQL()自定义函数无法访问外部电子表格。您必须调整SQL()自定义函数,以使其能够访问外部电子表格或重新设计公式。
如果您要重新设计公式,一种方法是将外部数据的导入移出“主公式”。为此,
Sheet1
)并将以下公式添加到A1 =IMPORTRANGE("long-hairy-key","MASTER!A:BN")
=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 by
,label
等。
<强>更新强>
因此,这个逐步解决方案并没有解决重新排列的问题。
诀窍是使用列名列表并将其保存为值:
=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
然后,您需要完成步骤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))
这就是你需要开始的一切。然后让你的查询变得更聪明。