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

将GDrive中XLSX文件数据同步至Google Sheet的方案求助

Google Drive中XLSX文件同步到Google Sheet的报错解决思路

问题背景

我在Google Drive中有一个XLSX格式的文件,每月会通过添加新版本进行更新。另有一个Google Sheet文件,需要基于该XLSX文件的数据制作图表。

最初尝试使用Google Sheet的IMPORTRANGE函数,但该函数不支持XLSX格式。随后编写了带调度功能的Google Apps Script脚本进行同步,代码如下:

function synchronizujDaneZExcela() {
  // 设置
  var kluczPlikuExcela = "_____MY_KEY_____";
  
  // 设置
  var nazwaArkuszaExcela = "Podsumowanie"; // Excel文件中的工作表名称
  var nazwaArkuszaGoogle = "Podsumowanie kopia"; // Google Sheets中的工作表名称
  
  // 获取Excel文件
  var plik = DriveApp.getFileById(kluczPlikuExcela);
  
  // 如果找到Excel文件
  if (plik) {
    // 获取Excel文件中"Podsumowanie"工作表的数据
    var excelData = SpreadsheetApp.open(plik).getSheetByName(nazwaArkuszaExcela).getDataRange().getValues();
    
    
    // 打开Google Sheets文件
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
    // 检查是否存在"Podsumowanie kopia"工作表,不存在则新建
    var arkusz = spreadsheet.getSheetByName(nazwaArkuszaGoogle);
    if (!arkusz) {
      arkusz = spreadsheet.insertSheet();
      arkusz.setName(nazwaArkuszaGoogle);
    }
    
    // 将数据写入Google Sheets
    arkusz.clear(); // 清空"Podsumowanie kopia"工作表
    arkusz.getRange(1, 1, excelData.length, excelData[0].length).setValues(excelData);
    
    Logger.log("同步成功完成。");
  } else {
    Logger.log("未找到Excel文件。");
  }
}

运行脚本时出现错误:Exception: Service Spreadsheets failed while accessing document with id ....


解决思路与替代方案

1. 修复现有脚本:转换XLSX为Google Sheet后读取

SpreadsheetApp.open()仅支持原生Google Sheet文件,无法直接读取XLSX格式。需要先将XLSX转换为临时Google Sheet,读取数据后再清理临时文件。

修改后的脚本如下(需启用Drive API):

function synchronizujDaneZExcela() {
  var kluczPlikuExcela = "_____MY_KEY_____";
  var nazwaArkuszaExcela = "Podsumowanie";
  var nazwaArkuszaGoogle = "Podsumowanie kopia";
  
  var plik = DriveApp.getFileById(kluczPlikuExcela);
  if (!plik) {
    Logger.log("未找到Excel文件。");
    return;
  }

  // 将XLSX转换为临时Google Sheet
  var tempSheet = Drive.Files.copy(
    {title: "Temp_Excel_Conversion", mimeType: MimeType.GOOGLE_SHEETS},
    kluczPlikuExcela
  );

  try {
    // 读取转换后的Google Sheet数据
    var excelData = SpreadsheetApp.openById(tempSheet.id).getSheetByName(nazwaArkuszaExcela).getDataRange().getValues();
    
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var arkusz = spreadsheet.getSheetByName(nazwaArkuszaGoogle);
    if (!arkusz) {
      arkusz = spreadsheet.insertSheet();
      arkusz.setName(nazwaArkuszaGoogle);
    }
    
    arkusz.clear();
    arkusz.getRange(1, 1, excelData.length, excelData[0].length).setValues(excelData);
    
    Logger.log("同步成功完成。");
  } catch (e) {
    Logger.log("同步出错:" + e.message);
  } finally {
    // 删除临时转换的Google Sheet
    DriveApp.getFileById(tempSheet.id).setTrashed(true);
  }
}

启用Drive API步骤:

  • 在脚本编辑器中点击「扩展」→「Apps Script」→「服务」→「添加服务」,找到「Drive API」并启用;
  • 或在Google Cloud Console中为当前脚本项目启用Drive API权限。

2. 替代方案:自动转换+IMPORTRANGE

利用Google Drive的自动转换功能,将XLSX自动转为Google Sheet,再用IMPORTRANGE同步数据:

  • 打开Google Drive,点击右上角设置图标→「设置」→「上传设置」,勾选「上传时将上传的文件转换为Google Docs编辑器格式」,保存设置;
  • 后续上传XLSX新版本时,系统会自动生成对应的Google Sheet文件;
  • 在目标Google Sheet中使用公式:=IMPORTRANGE("转换后的Google Sheet ID", "Podsumowanie!A:Z"),首次使用需授权访问权限。

若需要保留原XLSX文件,可手动替换版本:右键点击转换后的Google Sheet→「管理版本」→「上传新版本」,选择最新的XLSX文件,转换后的Sheet会自动更新数据,IMPORTRANGE也会同步刷新。

3. 轻量脚本方案:直接导入XLSX数据

如果XLSX表格结构简单,可直接解析文件内容导入目标Sheet,无需转换格式:

function importXLSXToSheet() {
  var xlsxFileId = "_____MY_KEY_____";
  var targetSheetName = "Podsumowanie kopia";
  
  var xlsxFile = DriveApp.getFileById(xlsxFileId);
  var targetSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);
  
  if (!targetSheet) {
    targetSheet = targetSpreadsheet.insertSheet(targetSheetName);
  }
  
  // 清空目标工作表
  targetSheet.clear();
  
  // 解析XLSX并导入数据(适配简单表格)
  var blob = xlsxFile.getBlob();
  var data = Utilities.parseCsv(blob.getDataAsString(), "\t");
  targetSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
  
  Logger.log("数据导入完成。");
}

注:此方法对合并单元格、复杂公式等格式兼容性较差,仅适用于基础结构的表格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:14:52