如何修复谷歌文档与表格合并代码第4行的非法字符错误?
修复Google Apps Script邮件合并代码中的“非法字符”及其他错误
我帮你排查了代码里的问题,主要是中文标点符号和一些小的语法/拼写错误导致的“非法字符”报错,具体修复方案和修正后的代码如下:
核心错误原因及修复点
- 非法字符根源:代码里多处使用了中文单引号(‘’),而Google Apps Script只识别英文单引号(''),比如第4行的
‘NONE’、后续的'DB7’、‘v’等,这些中文标点会被判定为非法字符。 - 变量拼写错误:你创建的文档对象是
message,但后续错误地写成了vestule,这会导致“未定义变量”的报错。 - 语法缺失:
else str += ‘miss’语句末尾缺少分号,这会打断JavaScript的执行逻辑。
修正后的完整代码
function mailMerge() { var db, doc; var files = DriveApp.getFilesByName('NONE'); if (files.hasNext()) db = files.next(); else return; files = DriveApp.getFilesByName('DB7'); if (files.hasNext()) doc = files.next(); else return; var ss = SpreadsheetApp.openById(db.getId()); var template = DocumentApp.openById(doc.getId()); var messageBody = DocumentApp.create('message').getBody(); // 重命名变量更清晰 var templateParagraphs = template.getBody().getParagraphs(); var sheetValues = ss.getSheets()[0].getDataRange().getValues(); var i, j, str; for (i=1; i<sheetValues.length; i++) { str = sheetValues[i][0] + ' '; if (sheetValues[i][1] == 'v') { str += 'mister'; } else { str += 'miss'; } // 补充分号并格式化代码结构 var p; for (j=0; j<templateParagraphs.length; j++) { p = templateParagraphs[j].copy(); messageBody.appendParagraph(p); } messageBody.replaceText('{name}', str); messageBody.appendPageBreak(); } }
额外优化说明
我还对变量名做了重命名(比如par改成templateParagraphs,val改成sheetValues),让代码逻辑更易读,你可以根据自己的习惯调整。另外运行前请确认:
- Google Drive中确实存在名为
NONE的电子表格和DB7的文档 - 电子表格的第一行是表头,从第二行开始是数据
- 文档模板里包含
{name}这个占位符用于替换
内容的提问来源于stack exchange,提问作者Daniel Burnstein
相关产品推荐
相关产品推荐

