我有一个Google表格,它在以下表达式中生成错误:
=query(Capacity!A5:FE135,"SELECT C,A WHERE "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&" = '"&C2&"' AND "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&" = 1 ORDER BY C")
对于D2
处的单个特定输入值(日期)。
本质上,该代码的目的是在第二张工作表(容量)中找到日期D2
处的列位置,并将该工作表中该列的值放置到第二页中的C
列中当前工作表,同时还只选择与第二列匹配的行。但是,当日期设置为特定值时,该表达式将不求值。
将这个大规模表达式分解为各个组成部分时,发现问题是由以下表达式引起的:
=SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")
对于有问题的日期,将返回BY
列。
这意味着使用Google Visualization API查询语言评估的表达式为:
SELECT C,A WHERE BY = '' AND BW = 1 ORDER BY C
但是查询语言将BY
视为保留字,而不是列和barfs。
如何才能以某种方式转义列名,以使其清楚地被视为列名?
答案 0 :(得分:1)
方法是用反引号将引起问题的部分包围起来(就像我以前在此处制作文本monospaced
一样):
=query(Capacity!A5:FE135,"SELECT C,A WHERE `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&"` = '"&C2&"' AND `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&"` = 1 ORDER BY C")
所以查询看起来像
SELECT C,A WHERE `BY` = '' AND `BW` = 1 ORDER BY C
我认为这在工作表很大时会有所帮助,以至于我们也位于列IF
上。