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

时间:2019-04-19 13:45:45

标签: string google-apps-script google-sheets google-sheets-query importrange

我正在IMPORTRANGE上使用QUERY在App Script中设置一些报告数据。一切正常,直到我尝试插入从日期列中提取短格式字符串month [ie 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语句(不使用format语句)使用单引号或反引号会导致公式分析错误:

=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列遇到““ format”“ format”“。期望其中之一:” true“ ...” false“。 ..”。按照建议,如果我使用反斜杠作为转义字符,则会出现公式解析错误。

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

1 个答案:

答案 0 :(得分:0)

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

0

或脚本中的反引号`