1

我使用了一个脚本,该脚本允许我在同一个 Google工作簿中的工作表的 QUERY 中将列名替换为 Col# 格式,但是当我使用 IMPORTRANGE 从不同的 Google Sheets 电子表格中调用 QUERY 时,我收到此错误:

未找到范围(第 11 行,文件“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 函数来自这里

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

4

2 回答 2

0

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

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

  1. 首先,获取外部范围。添加一个新工作表(假设它的名称是Sheet1)并将以下公式添加到 A1=IMPORTRANGE("long-hairy-key","MASTER!A:BN")
  2. 其次,将“主要公式”替换为其他类似下一个:
=查询(
   Shee1!A:BN,
   SQL("Sheet1!A:BN",STATS!D33,true)),
   1
 )
于 2016-06-07T23:36:12.727 回答
0

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

步骤1。使用 importrange 仅获取标题。

将此公式粘贴到 Sheet1 A1 中:

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

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

第2步。添加列号。

将此公式粘贴到 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

第三步。组合 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))

在我的例子中,这个公式给出了 string select Col1, Col3, Col5,这可以在查询公式中使用:

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

使用附加列使您的 SQL 更智能,添加where子句,order by等等label


更新

所以这个分步解决方案并不能解决重新排列的列的问题。

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

  1. 粘贴步骤1中的公式:=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
  2. 复制它→转到粘贴空间→值

然后你需要通过步骤 1 和 2 来制作当前的 firld 号码列表。

然后你实际上会有两张桌子。第一个将保存由 step1 和 step2 的公式生成的实际字段列表和字段编号。这是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))

这就是你需要开始的一切。然后让您的查询更智能。

于 2016-06-08T06:33:16.973 回答