You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:40:32