修改Google Apps Script解决Google Sheet导出.xlsx工作表名异常问题
解决Google Apps Script导出Google Sheet为xlsx时工作表名称带后缀的问题
你的脚本核心问题在于直接通过拼接单元格数据生成Blob的方式不符合xlsx文件规范,导致文件结构异常,工作表名称被错误附加.xlsx后缀,进而让Excel无法正常识别。正确的做法是利用Google Drive原生导出功能,生成标准格式的xlsx文件。
以下是修正后的完整脚本:
function exportSheetToXlsx() { // 替换为你的Google Sheet ID const sheetId = '[SHEET_ID]'; const spreadsheet = SpreadsheetApp.openById(sheetId); const fileName = `${spreadsheet.getName()}.xlsx`; // 自动获取原文件所在的文件夹 const sourceFile = DriveApp.getFileById(sheetId); const parentFolders = sourceFile.getParents(); const targetFolder = parentFolders.hasNext() ? parentFolders.next() : DriveApp.getRootFolder(); // 删除文件夹中已存在的同名xlsx文件 const existingFiles = targetFolder.getFilesByName(fileName); while (existingFiles.hasNext()) { existingFiles.next().setTrashed(true); } // 调用Drive API导出标准xlsx文件 const exportUrl = `https://www.googleapis.com/drive/v3/files/${sheetId}/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`; const requestOptions = { headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` } }; const response = UrlFetchApp.fetch(exportUrl, requestOptions); const excelBlob = response.getBlob().setName(fileName); // 将生成的xlsx文件保存到目标文件夹 targetFolder.createFile(excelBlob); }
关键注意事项:
启用Drive API:
在脚本编辑器的「资源」→「高级Google服务」中开启Drive API,否则无法调用官方导出接口。格式合规性:
使用Google官方导出接口生成的xlsx文件完全符合微软格式标准,工作表名称会沿用原Google Sheet的名称,不会附加任何多余后缀。自动适配文件夹:
脚本会自动获取原Sheet所在的文件夹,无需手动填写folderId,完全匹配「保存到原文件同文件夹」的需求。
执行该脚本后,生成的xlsx文件可直接用Microsoft Excel打开,工作表名称与原Google Sheet完全一致。
内容的提问来源于stack exchange,提问作者Dimitris Priovolos CY
相关产品推荐
相关产品推荐

