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

String 尝试在查询中插入文本函数-在这种情况下如何转义字符串?,string,google-apps-script,google-sheets,google-sheets-query,importrange,String,Google Apps Script,Google Sheets,Google Sheets Query,Importrange,我正在应用程序脚本中设置一些报表数据,使用“导入查询”。在我尝试插入一个函数将日期列中的短格式字符串month[ie TEXT(Col4,“MMM”)]提取到查询中之前,一切都很好 据我所知,“MMM”必须有双引号,查询本身也必须有双引号 我的代码在部分中构建函数,如下所示: // get base data var dataRange = 'IMPORTRANGE("' + dataShtId + '", "VolunteerActivity")'; var selQuery =

我正在应用程序脚本中设置一些报表数据,使用“导入查询”。在我尝试插入一个函数将日期列中的短格式字符串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”)],我会得到“公式解析错误”

如果我在引号[文本(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 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 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 `)
然后我尝试避开内部引号:

=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 ")
这将给出:无法解析函数查询参数2的查询字符串:parse_错误:在第1行第28列遇到“format”“format”。期待着一个“真的”。。。“false”…。如果我使用反斜杠作为转义字符,正如建议的那样,我会得到公式解析错误


最后,我通过在原始数据中插入一个额外的计算列来完成一个工作循环。

尝试在
查询中使用
格式
参数
公式:


或者可能是脚本中的反引号
`
,我认为这在脚本中是不可能的-它只是抛出了一个错误。或者,如果我在该部分中更改引号,结果会产生一个解析错误。您是否尝试过``?是的。我在原始查询中尝试过,也在将每个单引号更改为双引号的查询中尝试过,每个都尝试过uble for single。在原始查询中,它抛出一个错误。在带有更改引号的查询中,它给出了一个解析错误。这是合法的字符串吗?不允许在字符串周围使用它,如果我在
mmm
周围使用它,我会得到一个解析错误。我通过在原始数据中创建一个额外的计算列来解决这个问题tain是月字符串,但是不能这样做很烦人。还有其他建议吗?忘记应用程序脚本。你的公式在谷歌工作表中甚至都不起作用。你不能使用
text()
这样的内部查询。@player0是对的。如果您仍然有错误,请按照下面的答案中建议的最新修改来回答您的问题。
=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 ")