在 IMPORTRANGE QUERY 中使用列名
Using column names in IMPORTRANGE QUERY
我使用了一个脚本,该脚本允许我在同一 Google 工作簿 中的 sheet QUERY 中用列名替换 Col# 格式,但是当我使用 IMPORTRANGE 从不同的 Google Sheets spreadsheet 调用 QUERY 时,出现此错误:
Range not found (line 11, file "SQLfunction")
我的呼叫单元看起来像这样:
=QUERY(
IMPORTRANGE("long-hairy-key","MASTER!A:BN"),
IMPORTRANGE("long-hairy-key",SQL("MASTER!A:BN",STATS!D33,true)),
1
)
STATS!D33 是这样的:
select TRACT,PARID,LINE,OWN1,T_STATUS,ExhibitDate,FEET2,NewEase,TWSacres,ExistEase,PrevDistTWS,ATWSacres,ARdistance,StagingArea,Damages,UpdateReason,ACQ_STATUS where Col51 <>'' ORDER BY LINE ASC, TRACT ASC Label OWN1 'Landowner'
并且 SQL 函数来自 here.
有人可以推荐我如何调整脚本以适应 IMPORTRANGE 吗?
引用的 SQL() 自定义函数无法访问外部传播sheet。您必须调整 SQL() 自定义函数,使其能够访问外部价差sheet 或重新设计您的公式。
如果您要重新设计公式,一种方法是将外部数据的导入移出 "main formula"。为此,
- 首先,获取外部范围。添加一个新的sheet(假设它的名称是
Sheet1
)并将以下公式添加到A1 =IMPORTRANGE("long-hairy-key","MASTER!A:BN")
- 其次,将 "main formula" 替换为下一个:
=QUERY(
Shee1!A:BN,
SQL("Sheet1!A:BN",STATS!D33,true)),
1
)
您可以使用公式生成 sql 语句。
Step1. 使用 importrange 仅获取 headers。
将此公式粘贴到 Sheet1 A1 中:
=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
需要转置数据以制作字段名称的垂直列表。
Step2. 添加列号。
将此公式粘贴到 B1 中:
=ARRAYFORMULA(ROW(OFFSET(A1,,,counta(A:A))))
在这一步你会得到 table,它看起来像这样:
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
等等。
更新
所以这个 step-by-step 解决方案不能解决重新排列列的问题。
诀窍是使用列名列表并将其保存为值:
- 粘贴第 1 步中的公式:
=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
- 复制它 → 去粘贴空格 → 值
然后您需要完成第 1 步和第 2 步才能制作当前号码列表。
然后你实际上会有两个 table。第一个将包含实际字段列表和字段编号,由步骤 1 和步骤 2 中的公式生成。这里是 Table1
:
A B
1 FieldName1 1
2 FieldName2 2
3 FieldName3 3
4 FieldName4 4
5 FieldName5 5
第二个 table 将具有 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))
这就是您需要开始的全部内容。然后让您的查询更智能。
我使用了一个脚本,该脚本允许我在同一 Google 工作簿 中的 sheet QUERY 中用列名替换 Col# 格式,但是当我使用 IMPORTRANGE 从不同的 Google Sheets spreadsheet 调用 QUERY 时,出现此错误:
Range not found (line 11, file "SQLfunction")
我的呼叫单元看起来像这样:
=QUERY(
IMPORTRANGE("long-hairy-key","MASTER!A:BN"),
IMPORTRANGE("long-hairy-key",SQL("MASTER!A:BN",STATS!D33,true)),
1
)
STATS!D33 是这样的:
select TRACT,PARID,LINE,OWN1,T_STATUS,ExhibitDate,FEET2,NewEase,TWSacres,ExistEase,PrevDistTWS,ATWSacres,ARdistance,StagingArea,Damages,UpdateReason,ACQ_STATUS where Col51 <>'' ORDER BY LINE ASC, TRACT ASC Label OWN1 'Landowner'
并且 SQL 函数来自 here.
有人可以推荐我如何调整脚本以适应 IMPORTRANGE 吗?
引用的 SQL() 自定义函数无法访问外部传播sheet。您必须调整 SQL() 自定义函数,使其能够访问外部价差sheet 或重新设计您的公式。
如果您要重新设计公式,一种方法是将外部数据的导入移出 "main formula"。为此,
- 首先,获取外部范围。添加一个新的sheet(假设它的名称是
Sheet1
)并将以下公式添加到A1=IMPORTRANGE("long-hairy-key","MASTER!A:BN")
- 其次,将 "main formula" 替换为下一个:
=QUERY( Shee1!A:BN, SQL("Sheet1!A:BN",STATS!D33,true)), 1 )
您可以使用公式生成 sql 语句。
Step1. 使用 importrange 仅获取 headers。
将此公式粘贴到 Sheet1 A1 中:
=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
需要转置数据以制作字段名称的垂直列表。
Step2. 添加列号。
将此公式粘贴到 B1 中:
=ARRAYFORMULA(ROW(OFFSET(A1,,,counta(A:A))))
在这一步你会得到 table,它看起来像这样:
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
等等。
更新
所以这个 step-by-step 解决方案不能解决重新排列列的问题。
诀窍是使用列名列表并将其保存为值:
- 粘贴第 1 步中的公式:
=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
- 复制它 → 去粘贴空格 → 值
然后您需要完成第 1 步和第 2 步才能制作当前号码列表。
然后你实际上会有两个 table。第一个将包含实际字段列表和字段编号,由步骤 1 和步骤 2 中的公式生成。这里是 Table1
:
A B
1 FieldName1 1
2 FieldName2 2
3 FieldName3 3
4 FieldName4 4
5 FieldName5 5
第二个 table 将具有 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))
这就是您需要开始的全部内容。然后让您的查询更智能。