试图将文本函数插入QUERY - 如何在这种情况下转义字符串?

问题描述 投票:0回答:1

我正在使用QUERY over IMPORTRANGE在App脚本中设置一些报告数据。一切都很好,直到我尝试插入一个函数来从日期列中提取短格式字符串月份[即TEXT(Col4,“MMM”)]到查询中。

据我所知,“MMM”必须有双引号,查询本身也必须如此。

我的代码在部分中构建函数,如下所示:

  // get base data
  var dataRange = 'IMPORTRANGE("' + dataShtId + '", "VolunteerActivity")';
  var selQuery = 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = ' + reportYear + ' ';
  if (reportVolunteer != "") {
    selQuery = selQuery + "and Col1='" + reportVolunteer + "'"; 
  }
  if (reportTeam != "") {
    selQuery = selQuery + "and Col2='" + reportTeam + "'"; 
  }
  selQuery = selQuery + 'group by Col1,Col2,Col4 order by month(Col4) ';
  selQuery = selQuery + "label Col1 'Volunteer', Col2 'Team', SUM(Col3) 'Count', Col4 'Month'";
  var querytext = "";
  querytext = '=QUERY(' + dataRange + ', "' + selQuery + '")';
  Logger.log(querytext);

这个结果函数很好:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),Col4 group by Col1,Col2,Col4 order by month(Col4) label Col1 'Volunteer', Col2 'Team', SUM(Col3) 'Count', Col4 'Month'")

如果我现在更改Col4以返回短月份字符串而没有任何引号围绕MMM [TEXT(Col4,MMM)]我得到“无法解析查询字符串”。

如果我在MMM周围添加单引号[TEXT(Col4,'MMM')],我会得到相同的解析错误。

如果我把双引号[TEXT(Col4,“MMM”)]我得到“公式解析错误”。

如果我在引号[TEXT(Col4,\“MMM \”)]前面放置转义字符,我也会得到“公式解析错误”。

如果我现在尝试更改代码中的引号:

  // get base data
  var dataRange = "IMPORTRANGE('" + dataShtId + "', 'VolunteerActivity')";
  var selQuery = "select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = " + reportYear + " ";
  if (reportVolunteer != "") {
    selQuery = selQuery + 'and Col1="' + reportVolunteer + '"'; 
  }
  if (reportTeam != "") {
    selQuery = selQuery + 'and Col2="' + reportTeam + '"'; 
  }
  selQuery = selQuery + 'group by Col1,Col2,Col4 order by month(Col4) ';
  selQuery = selQuery + 'label Col1 "Volunteer", Col2 "Team", SUM(Col3) "Count", Col4 "Month"';
  var querytext = "";
  querytext = "=QUERY(" + dataRange + ", '" + selQuery + "')";
  Logger.log(querytext);

我得到这个结果,这也给出了“公式解析错误”:

=QUERY(IMPORTRANGE('190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY', 'VolunteerActivity')
, 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by month(Col4) label Col1 "Volunteer", Col2 "Team", SUM(Col3) "Count", Col4 "Month"')

我错过了什么?

编辑

为了澄清下面的对话,并忽略所有脚本,我试图让函数直接在工作表中工作。

这没有格式工作正常:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

尝试插入带单引号或反引号的格式会出现错误“无法解析查询字符串”:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),format Col4 'MMM' where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

对select语句使用单引号或反引号(不带格式语句)给出公式解析错误:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ')

不出所料,将格式插入上面也是一个错误:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, `select Col1,Col2,SUM(Col3),format Col4 "MMM" where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 `)

然后我尝试转义内部引号:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),format Col4 ""MMM"" where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

这给出:无法解析函数QUERY参数2的查询字符串:PARSE_ERROR:遇到“”格式“”格式“”在第1行第28列。期待以下之一:“true”...“false”......“如果我使用反斜杠作为转义字符,如建议的那样,我得到公式解析错误。

我最后通过在原始数据中插入一个额外的计算列来通过月份来进行工作。

string google-apps-script google-sheets google-sheets-query importrange
1个回答
0
投票

尝试在format公式中使用QUERY参数:

0

或者在你的剧本中重新引用`

© www.soinside.com 2019 - 2024. All rights reserved.