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

如何通过文件名而非外部链接在Google Sheets Apps Script中导入CSV数据?

解决Google Sheets通过Apps Script导入Drive中CSV文件的问题

问题背景

需要通过Apps Script将Google Drive中的CSV文件导入Google Sheets,不依赖外部链接,多次尝试后失败,报错信息:

TypeError: Cannot read properties of null (reading 'getRange')
中文翻译:类型错误:无法读取null的属性'getRange'

尝试过的代码包括:

原参考代码(外部链接版本)

function myFunction() {
  function importData()
  {
    var ss = SpreadsheetApp.getActive();
    var url = 'https://your-data-source.csv';
    var text = UrlFetchApp.fetch(url).getContentText();
    var csvData = Utilities.parseCsv(text);
    var sheet = ss.getSheetByName('Sheet1');
    for (var i = 0; i < csvData.length; i++) {
      sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
    }
  }
  importData();
}

第一次修改(错误使用文件名作为URL)

function myFunction() {
  function importData()
  {
    var ss = SpreadsheetApp.getActive();
    var fileName = 'TEST.csv';
    var text = UrlFetchApp.fetch(fileName).getContentText();
    var csvData = Utilities.parseCsv(text);
    var sheet = ss.getSheetByName('Sheet1');
    for (var i = 0; i < csvData.length; i++) {
      sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
    }
  }
  importData();
}

第二次修改(尝试读取Drive文件,但未处理异常)

function myFunction() {
  function importData()
  {
    var ss = SpreadsheetApp.getActive();
    var file = DriveApp.getFilesByName("RECORDS.csv")
    var csv = file.next().getBlob().getDataAsString();
    var csvData = Utilities.parseCsv(csv);
    var sheet = ss.getSheetByName('Sheet1');
    for (var i = 0; i < csvData.length; i++) {
      sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
    }
  }
  importData();
}

错误原因分析

报错无法读取null的属性'getRange'说明sheet变量为null,即ss.getSheetByName('Sheet1')未找到对应工作表,可能原因:

  • 工作表名称拼写错误(区分大小写、空格)
  • 当前Spreadsheet中不存在名为Sheet1的工作表

此外,第一次修改中使用UrlFetchApp.fetch(fileName)是错误用法,该方法仅支持HTTP/HTTPS链接,无法直接读取Drive文件名。

修正后的代码

以下代码处理了文件查找、工作表存在性检查,并优化了数据写入效率:

function importCsvFromDrive() {
  // 配置参数
  const csvFileName = "RECORDS.csv"; // Drive中的CSV文件名
  const sheetName = "Sheet1"; // 目标工作表名称

  // 获取当前Spreadsheet
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // 获取或创建目标工作表
  let sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    SpreadsheetApp.getUi().alert(`未找到工作表${sheetName},已自动创建`);
  }

  // 查找Drive中的CSV文件
  const fileIterator = DriveApp.getFilesByName(csvFileName);
  if (!fileIterator.hasNext()) {
    SpreadsheetApp.getUi().alert(`Drive中未找到文件${csvFileName}`);
    return;
  }

  // 读取并解析CSV数据
  const csvFile = fileIterator.next();
  const csvContent = csvFile.getBlob().getDataAsString();
  const csvData = Utilities.parseCsv(csvContent);

  // 清空工作表现有数据(可选,根据需求注释)
  sheet.clearContents();

  // 一次性写入所有数据(比逐行写入效率更高)
  if (csvData.length > 0) {
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
  }

  SpreadsheetApp.getUi().alert("CSV数据导入完成");
}

注意事项

  • 确保CSV文件存储在你的Google Drive中,文件名完全匹配(包括大小写、特殊字符)
  • 第一次运行脚本时,需要授权脚本访问Google Drive和Spreadsheet的权限
  • 若目标工作表名称为中文(如"工作表1"),需修改代码中的sheetName参数
  • 若CSV文件有特殊编码(如GBK),需在getDataAsString()中指定编码,例如:getDataAsString("GBK")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:22