Google Apps Script下载XLS附件被识别为Word文档的修复咨询
解决Google Apps Script中XLS附件存Drive被误识别为Word的问题
你的问题核心是邮件附件的MIME类型被标记为application/octet-stream,而非Excel对应的标准类型,导致Google Drive自动识别错误。你现在先创建文件再修改MIME类型的方式行不通,因为Drive会根据初始Blob的类型做自动归类,后续修改无法覆盖这个识别结果。
修复方案:创建文件时直接指定正确的MIME类型
不需要先创建再更新,直接在createFile方法中明确指定Excel的MIME类型,从根源告诉Drive这是一个Excel文件。
修改后的完整代码
function downloadAttachmentsAndMarkAsRead() { var senderEmail = "support@site.com"; var searchQuery = "from:" + senderEmail + " is:unread has:attachment filename:xls"; var threads = GmailApp.search(searchQuery); var folder = DriveApp.getFolderById("1i8Bh0cy3R1hRFix9t4yc0fCTksLD4oNY"); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var message = messages[j]; message.markRead(); var attachments = message.getAttachments(); for (var k = 0; k < attachments.length; k++) { var attachment = attachments[k]; var contentType = attachment.getContentType(); Logger.log("Original MIME type: " + contentType); // 强制将附件设置为XLS的MIME类型,覆盖octet-stream的错误标记 var excelBlob = attachment.copyBlob().setContentType(MimeType.MICROSOFT_EXCEL); var file = folder.createFile(excelBlob, attachment.getName()); Logger.log("Downloaded: " + file.getName() + " | MIME type set to: " + MimeType.MICROSOFT_EXCEL); } } } }
关键改动说明
setContentType强制指定MIME类型:通过attachment.copyBlob().setContentType(MimeType.MICROSOFT_EXCEL),把原本可能是octet-stream的Blob转换成标准的XLS类型。- 直接创建正确类型的文件:将处理后的Blob传入
createFile,Drive会直接识别为Excel文件,不会再误判为Word。
额外注意事项
- 如果你的附件是XLSX格式(新版Excel),把
MimeType.MICROSOFT_EXCEL换成MimeType.MICROSOFT_EXCEL_XLSX即可,对应的MIME类型是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。 - 上面的代码使用原生DriveApp服务,无需额外启用高级API,直接运行即可。
内容的提问来源于stack exchange,提问作者Timur Sarsembai
相关产品推荐
相关产品推荐

