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

Google Apps Script导入CSV报无法解析文本错误如何解决

报错核心原因

抛出Could not parse text错误的根本原因是文件编码不匹配:

  • 你使用的Revit导出CSV文件在中文环境下默认采用GBK编码,而代码中getBlob().getDataAsString()方法默认以UTF-8编码读取文件内容,读取后会出现乱码,破坏CSV原有的逗号分隔结构,直接导致Utilities.parseCsv()解析失败。
  • 原代码还存在3个隐性问题:
    • 没有做文件存在性校验,若Drive中无对应名称文件,调用file.next()会直接抛出无匹配项错误
    • 没有指定CSV分隔符,若CSV实际使用非逗号分隔符,会出现列解析错位
    • 写入前没有清空目标工作表旧数据,多次导入会残留历史内容
修复后可直接运行的代码
function importConduitRunsSchdeule() {
  const ss = SpreadsheetApp.getActive();
  const targetSheetName = 'CONDUIT_RUNS_REVIT';
  const csvFileName = "CONDUIT_RUNS_REVIT.csv";

  // 校验目标文件是否存在
  const fileIterator = DriveApp.getFilesByName(csvFileName);
  if (!fileIterator.hasNext()) throw `Drive中未找到文件:${csvFileName}`;
  const csvFile = fileIterator.next();

  // 指定GBK编码读取文件内容,适配Revit导出CSV的默认编码
  const csvRawContent = csvFile.getBlob().getDataAsString('GBK');
  // 明确指定逗号为分隔符解析CSV
  const parsedCsvData = Utilities.parseCsv(csvRawContent, ',');

  if (parsedCsvData.length === 0) throw 'CSV文件无有效内容';

  // 校验目标工作表是否存在
  const targetSheet = ss.getSheetByName(targetSheetName);
  if (!targetSheet) throw `当前表格中未找到工作表:${targetSheetName}`;

  // 清空原有内容后写入新数据
  targetSheet.clearContents();
  targetSheet.getRange(1, 1, parsedCsvData.length, parsedCsvData[0].length)
    .setValues(parsedCsvData);
}
注意事项
  • 首次运行脚本时,会弹出Google账号授权提示,按照指引授予脚本Drive文件读取、电子表格编辑权限即可正常运行
  • 如果运行后出现列错位问题,可以本地打开CSV确认实际分隔符,替换Utilities.parseCsv第二个参数为对应分隔符即可(比如分号分隔就传入';')
  • 若后续CSV导出工具更换为UTF-8编码,把getDataAsString('GBK')改回getDataAsString()即可正常解析

内容的提问来源于stack exchange,提问作者alanWall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:09:25