Google Sheets Script设置公式报missing ) after argument list错误求助
问题根源
你遇到的语法报错和正则逻辑无关,是字符串引号冲突导致的:你用双引号包裹了整个setFormula的公式参数,但公式内部的"No Match"也用了双引号,JavaScript解析代码时会把"No Match前面的双引号识别为整个公式字符串的结束标记,后续内容无法解析,因此抛出missing ) after argument list的语法错误。
你存储在N3单元格的正则规则本身不需要修改,修正引号冲突即可正常运行。
解决方法
只需要处理引号的嵌套冲突即可,推荐两种可行方案:
方案1:公式外层用单引号包裹
由于公式内部用的是双引号,外层直接换用单引号包裹整个公式即可避免冲突,修正后代码如下:
function fillN() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 外层用单引号包裹整个公式,内部双引号正常使用 ss.getRange("N4").setFormula('=IF(ISNUMBER(MATCH(REGEXEXTRACT(A4,$N$3),Sheet8!$A$1:$A,0)),INDEX(Sheet8!$B$1:$B,MATCH(REGEXEXTRACT(A4,$N$3),Sheet8!A:A,0)),"No Match")'); var lr = ss.getLastRow(); var fillDownRange = ss.getRange(4,14,lr-3); ss.getRange("N4").copyTo(fillDownRange); }
方案2:转义公式内部的双引号
如果要保留外层的双引号包裹,只需要给公式内部的双引号前加反斜杠\转义即可:
function fillN() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 内部双引号加反斜杠转义 ss.getRange("N4").setFormula("=IF(ISNUMBER(MATCH(REGEXEXTRACT(A4,$N$3),Sheet8!$A$1:$A,0)),INDEX(Sheet8!$B$1:$B,MATCH(REGEXEXTRACT(A4,$N$3),Sheet8!A:A,0)),\"No Match\")"); var lr = ss.getLastRow(); var fillDownRange = ss.getRange(4,14,lr-3); ss.getRange("N4").copyTo(fillDownRange); }
额外优化建议
原来公式里的ISNUMBER(...) = TRUE是冗余写法,直接写ISNUMBER(...)即可,本身返回的就是布尔值,不影响运行效果,仅简化公式长度。
内容的提问来源于stack exchange,提问作者Debora S.
相关产品推荐
相关产品推荐

