JS将字符串转多维数组插入Google Doc表格,doGet传参失效如何解决
问题原因
- 传参逻辑错误:doGet/doPost调用
ManageSheet时仅传入了事件对象e,函数参数接收逻辑不匹配,没有正确拿到表格数据。 - 数据解析逻辑错误:硬编码版本中
strArr是包含3个行字符串的数组,而你用var strArr = [ e.parameter.table1here ]时,相当于把传过来的完整表格字符串当成了数组的唯一元素,解析后得到的结构不符合insertTable要求的二维数组格式,所以无法生成表格。 - 转义符丢失问题:HTTP请求传参过程中,双引号前的转义符
\会被自动解码,会导致JSON.parse执行时报格式错误。
解决方案
第一步:调整App Inventor传参逻辑
将表格数组先转成标准JSON字符串后再作为table1here参数传递,避免转义错误。
第二步:修改Google Apps Script代码
function doGet(e) { return ManageSheet(e); } function doPost(e) { return ManageSheet(e); } function ManageSheet(e){ var docTemplateId = "my google doc template here"; var someName = "SomeNameFile"; var copiedFile = DriveApp.getFileById(docTemplateId).makeCopy(someName); var docOpen = DriveApp.getFilesByName('SomeNameFile').next().getId(); var doc = DocumentApp.openById(docOpen); var body=doc.getBody(); var rgel=body.findText('TABLE1HERE'); var element=rgel.getElement(); var childIndex=body.getChildIndex(element.getParent()); // 修正后的解析逻辑 const tableRawStr = e.parameter.table1here; // 先解析得到行字符串数组 const strArr = JSON.parse(tableRawStr); // 转成二维数组 const result = strArr.map(row => JSON.parse(`[${row}]`)); body.replaceText('{branch_name}',"Some Thing"); body.replaceText('{borrower_name}',"Some more Thing"); body.getChild(childIndex).asText().setText(''); body.insertTable(childIndex,result); return ContentService.createTextOutput("Success"); }
调试建议
如果还是解析失败,可以在代码中添加Logger.log(tableRawStr),运行后在Google Apps Script后台查看日志,确认传过来的字符串实际格式,调整对应的解析规则即可。
内容的提问来源于stack exchange,提问作者Mallikarjunagowda Gowdara
相关产品推荐
相关产品推荐

