使用App Script将电子表格转Excel发邮件时附件无法打开如何解决
问题根源
你当前代码直接拉取的是谷歌表格的原生文件链接,获取到的并非标准xlsx格式内容,仅手动修改MIME类型和文件后缀无法解决格式不兼容的问题,必须调用谷歌表格的专用导出接口获取xlsx格式的文件流。
修正后代码
var folders = DriveApp.getFolderById('folder_id') var files = folders.getFiles(); if (files.hasNext()) { file = files.next(); // 替换为xlsx格式导出链接 var url = `https://docs.google.com/spreadsheets/d/${file.getId()}/export?format=xlsx`; var params = { method: "get", headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, muteHttpExceptions: true }; var blob = UrlFetchApp.fetch(url, params).getBlob(); // 直接设置文件名即可,无需强制修改MIME类型 blob.setName(file.getName() + ".xlsx"); MailApp.sendEmail(email_ids, 'Sample Subject', 'Mail with attachment', { attachments: [blob], name: 'Automatic Emailer Script', cc:email_id }) }
关键修改说明
- 将原
file.getUrl()替换为谷歌表格专属的xlsx导出链接,导出接口会直接返回标准xlsx格式的文件流 - 移除了强制设置MIME类型的冗余代码,导出返回的blob本身已符合xlsx格式要求
- 补充了原代码中缺失的
fileName变量定义,示例中直接取源文件名称作为附件名称,你可根据需求自定义
内容的提问来源于stack exchange,提问作者Navneeth
相关产品推荐
相关产品推荐

