Google Sheets Apps Script Web App获取CSV出现额外单引号问题修复
解决Google Sheets发布CSV后Web App输出额外单引号问题
问题背景
我在Google Sheets中存储了代码类数据,将表格发布为.csv格式后,通过Apps Script编写Web App,使用UrlFetchApp获取发布的CSV内容并以JavaScript类型输出。但Web App输出中,除第一行外其余行首尾均出现额外单引号,需要解决该问题。
表格单元格内容
- C1:
tdsyltt = 'ఈరోజు ( బుధవారం ) క్విజ్ సిలబస్' ; - C2:
tdsyl = 'హబక్కూకు 1 & యాకోబు 2, 3' ; - C4:
document.getElementById("tdsyltt).innerHTML = tdsyltt ; - C5:
document.getElementById("tdsyl").innerHTML = tdsyl ;
原code.gs代码
const doGet = _ => ContentService.createTextOutput(UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/e/2PACX-1vReY-tDEwKYjTiSjsfAN42qjFUwMv_OD3_64bFdGrgL-2p3otc13elLcCq3pkb5xqhTA-bW3QXobpqh/pub?gid=1861615717&single=true&range=c1:c5&output=csv").getContentText()).setMimeType(ContentService.MimeType.JAVASCRIPT);
问题原因
Google Sheets发布CSV时,会自动对包含特殊字符(如单引号、逗号、&符号)的单元格内容添加单引号包裹,防止CSV解析出错。但当我们直接将CSV内容作为JavaScript输出时,这些额外的单引号就会成为无效语法,导致问题。
解决方案
方法一:处理CSV内容,移除多余单引号
修改code.gs代码,获取CSV文本后按行分割,对每一行判断首尾是否为单引号,若是则移除,再拼接输出:
const doGet = _ => { // 获取发布的CSV内容 const csvContent = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/e/2PACX-1vReY-tDEwKYjTiSjsfAN42qjFUwMv_OD3_64bFdGrgL-2p3otc13elLcCq3pkb5xqhTA-bW3QXobpqh/pub?gid=1861615717&single=true&range=c1:c5&output=csv").getContentText(); // 按行分割并过滤空行 const lines = csvContent.split("\n").filter(line => line.trim() !== ""); // 处理每行:移除首尾单引号(如果存在) const processedLines = lines.map(line => { if (line.startsWith("'") && line.endsWith("'")) { return line.slice(1, -1); } return line; }); // 拼接后输出为JavaScript类型 return ContentService.createTextOutput(processedLines.join("\n")).setMimeType(ContentService.MimeType.JAVASCRIPT); };
方法二:直接读取Google Sheets数据,跳过CSV发布环节
绕开CSV发布流程,直接用SpreadsheetApp读取表格内容,避免CSV自动转义的问题:
const doGet = _ => { // 通过表格ID打开目标表格 const spreadsheet = SpreadsheetApp.openById("1R5Wgq4okSWz0d159X5kPvOk8W1T_6eZ2kwoq5kdjO0w"); // 获取指定范围的内容(替换为实际工作表名称,比如Sheet1) const range = spreadsheet.getRange("Sheet1!C1:C5"); const values = range.getValues(); // 提取非空单元格内容并拼接 const jsContent = values.flat().filter(value => value !== "").join("\n"); // 输出为JavaScript类型 return ContentService.createTextOutput(jsContent).setMimeType(ContentService.MimeType.JAVASCRIPT); };
注意:使用此方法时,部署Web App需要授权访问Google Sheets的权限。若设置为“任何人,甚至匿名”访问,需在OAuth配置中添加相应权限。
内容的提问来源于stack exchange,提问作者Prabhu Paul
相关产品推荐
相关产品推荐

