禁用UrlFetchApp时,如何用DriveApp和MailApp发送.xlsx格式谷歌表格邮件?
解决Google表格转xlsx附件发送的问题
你遇到的错误其实很好理解:getAs()方法根本不支持把Google原生表格直接转换成xlsx格式——它只能处理一些简单的格式转换(比如转PDF或CSV),而xlsx需要依赖Google专门的导出服务,getAs()搞不定这件事。
结合你不能用UrlFetchApp、只能用DriveApp和MailApp的限制,这里有个可行的解决方案:
方案:启用Drive高级服务来导出xlsx
很多组织虽然禁用了UrlFetchApp,但不会禁用官方的Drive高级服务,这是我们的突破口:
第一步:启用Drive高级服务
- 打开你的脚本编辑器
- 点击顶部菜单栏的服务 → 添加服务
- 在弹出的窗口里找到Drive API,点击「添加」,然后确认
第二步:修改你的代码
把原来的代码替换成下面的版本,核心是用Drive.Files.export来获取xlsx格式的Blob:
function testsendxlsx() { var spreadsheetId = "id_here"; var fileName = "testing.xlsx"; var recipient = "email_here"; var subject = "testing .xlsx"; var emailbody = "something"; // 导出Google表格为xlsx格式的Blob var xlsxBlob = Drive.Files.export(spreadsheetId, MimeType.MICROSOFT_EXCEL); xlsxBlob.setName(fileName); // 发送带附件的邮件(注意attachments参数用数组更稳妥) MailApp.sendEmail(recipient, subject, emailbody, {attachments: [xlsxBlob]}); }
备选方案(仅当高级服务也被禁用时)
如果你的组织连Drive高级服务也禁用了,那只能退而求其次:先把表格导出成CSV,再手动构建xlsx文件。但这个方法需要处理单元格格式、公式、样式等细节,非常繁琐,除非必要不推荐。如果必须这么做,可以把SheetJS这类处理Excel的库代码复制到你的脚本里(因为不能用外部链接),然后自己编写转换逻辑。
内容的提问来源于stack exchange,提问作者Davis
相关产品推荐
相关产品推荐

