Google Apps脚本将文件从驱动器返回为application / pdf而不是原始文件类型

时间:2017-10-06 17:31:01

标签: google-apps-script

运行我的脚本时,我收到错误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);
}

我错过了什么?

2 个答案:

答案 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