如何将数组传递到 Google 电子表格的 Google App 脚本中的查询字符串

Posted

技术标签:

【中文标题】如何将数组传递到 Google 电子表格的 Google App 脚本中的查询字符串【英文标题】:How to pass an array into a query string in Google App Script for a Google Spreadsheet 【发布时间】:2018-10-11 11:51:21 【问题描述】:

我有一个脚本,它将以字符串变量(名为sql)的形式进行查询,并将数据从 BigQuery 提取到 Google 电子表格。 如下所示:

var sql = "SELECT field1, field2 FROM table";
var queryResults;

try 
var queryRequest = BigQuery.newQueryRequest();
queryRequest.setQuery(sql).setTimeoutMs(100000).setUseLegacySql(false);
queryResults = BigQuery.Jobs.query(queryRequest, projectNumber);

现在,我想创建一个数组变量并将其传递给sql 查询字符串。当我将数组作为如下变量传递时,它不起作用:Google SpreadSheet 给了我一个错误:

GoogleJsonResponseException:无法识别的名称:becca at [1:1088] (“becca”是我数组的第一个值)

var array = ['a','b','c']
var sql = "SELECT field1 FROM UNNEST("+array+") AS field1";

它只有在我手动硬编码字符串数组时才有效,如下所示:

var sql = "SELECT field1 FROM UNNEST(['a','b','c']) AS field1";

但是我的数组应该是动态的,所以手动硬编码它不是一个选项。那么如何将它作为变量传递呢?

【问题讨论】:

“它不起作用”不是有效的问题描述。为什么不显示从那个和其他尝试中查询字符串的样子,以及相关的代码 sn-ps? ***.com/help/how-to-ask 查看文档中的 Utilities.formatString。 @tehhowch 抱歉,当我说“它不起作用”时,这是因为 Google 电子表格给了我一个错误:“GoogleJsonResponseException: Unrecognized name: becca at [1:1088]”(“becca " 是我数组中的第一个值) @I'-'I: 刚试过,还是一样的错误信息:GoogleJsonResponseException: Unrecognized name: becca at [1:1088] @I'-'I : 是的,现在可以了! 【参考方案1】:

您以字符串格式传递数组类型,这会产生问题。您需要将数组变量转换为这种数组格式的字符串格式。

var arrStr=arr.join("','");
"SELECT field1 FROM UNNEST(['"+arrStr+"']) AS field1"

【讨论】:

效果很好,谢谢!你是这里真正的 MVP!

以上是关于如何将数组传递到 Google 电子表格的 Google App 脚本中的查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量传递给电子表格函数?

有啥方法可以将数据从谷歌电子表格传递到 clickhouse?

如何将 Google 电子表格的工作表字符串 id 转换为整数索引 (GID)?

如何将 Google 电子表格的工作表字符串 id 转换为整数索引 (GID)?

Google Sheets API:创建电子表格或将电子表格移动到文件夹中

Google 表单:将数据发送到电子表格