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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图将文本函数插入QUERY - 如何在这种情况下转义字符串?相关的知识,希望对你有一定的参考价值。

我正在使用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”......“如果我使用反斜杠作为转义字符,如建议的那样,我得到公式解析错误。

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

答案

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

0

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

以上是关于试图将文本函数插入QUERY - 如何在这种情况下转义字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在这种情况下,如何将这个 json 映射到模型?

在这种情况下如何避免死锁?

Node.js async eachLimit 在这种情况下如何工作?

如何在文本区域的当前插入符号位置插入文本

将多行文本插入 Google Big Query

在这种情况下,我将如何遍历所有各种可能性?