运行我的脚本时,我收到错误Converting from application/pdf to application/vnd.google-apps.spreadsheet is not supported. (line 6, file "Code")
原始文件不是PDF而是excel工作表。我尝试了不同类型的不同文件,每个文件都以PDF格式返回。
这是我的代码:
function sendTimelist() {
var emailAddress = 'some@mail.com';
var mailReplyTo = 'somemore@mail.com';
var subject = 'Timelist';
var message = 'Here is my timelist!';
var timelist = SpreadsheetApp.openById("1v7EShuCrjrEa8BxW2JGCRDUwuIsUk03fnvvYEVntlvM").getAs(MimeType.GOOGLE_SHEETS);
var optAdvancedArgs = {replyTo: mailReplyTo, name: attachmentName, attachments: [timelist] };
var attachmentName = 'Timelist.xlsx';
GmailApp.sendEmail(emailAddress, subject, message, optAdvancedArgs);
}
我错过了什么?
答案 0 :(得分:3)
我专注于文件ID的长度。您的文件ID为1v7EShuCrjrEa8BxW2JGCRDUwuIsUk03fnvvYEVntlvM
。长度为44.对于Google云端硬盘中的Excel文件,ID的长度为28.而Google Docs(电子表格,文档,幻灯片)的大小,ID的长度为44。
如果在未分配导出格式的情况下下载Google Docs文件,则格式将自动变为PDF。
我认为您可能会尝试发送Google文档的电子表格。为了确认这一点,您可以尝试运行以下脚本吗?
var id = "1v7EShuCrjrEa8BxW2JGCRDUwuIsUk03fnvvYEVntlvM";
Logger.log(DriveApp.getFileById(id).getMimeType());
如果日志显示application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
,则该文件为Excel文件。如果日志显示application/vnd.google-apps.spreadsheet
,则该文件为电子表格文件。
对于Excel文件,当文件作为gmail的附件文件发送时,不会转换。可以发送Excel文件。对于电子表格文件,它将转换为PDF并作为附件文件发送。
如果您的文件是电子表格文件,为了将其作为Excel文件发送,您可以使用以下示例脚本。
function sendTimelist() {
var emailAddress = 'some@mail.com';
var mailReplyTo = 'somemore@mail.com';
var subject = 'Timelist';
var message = 'Here is my timelist!';
var attachmentName = 'Timelist.xlsx';
var fileId = "1v7EShuCrjrEa8BxW2JGCRDUwuIsUk03fnvvYEVntlvM";
var timelist = UrlFetchApp.fetch(
"https://docs.google.com/feeds/download/spreadsheets/Export?key=" + fileId + "&exportFormat=xlsx",
{
"headers": {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
"muteHttpExceptions": true
}
).getBlob().setName(attachmentName);
var optAdvancedArgs = {replyTo: mailReplyTo, name: attachmentName, attachments: [timelist] };
GmailApp.sendEmail(emailAddress, subject, message, optAdvancedArgs);
}
如果我误解了你的情况,我很抱歉。
答案 1 :(得分:0)
我认为问题的根源是使用SpreadsheetApp
来打开文件。要保留原始数据类型,请将其打开为DriveApp.getFileById(...)
,返回File对象。您也不应该getAs
。