【问题标题】:How to Attach Doc/Word file as attachment using Google appscript?如何使用 Google Apps 脚本将 Doc/Word 文件附加为附件?
【发布时间】:2021-04-19 18:51:52
【问题描述】:

我是 GAS 的新手,谁能告诉我如何使用 appscript 将 Google Doc 文件作为附件发送。我知道如何以 PDF 格式发送,但我需要将 Doc 文件作为 Word 文件从 Google Drive 中获取。

我正在尝试使用带有 onEdit 触发器的 google sheet 中的数据填充模板 doc 文件,并将新文件作为文档附件附加。

function davitFill(e) {

 if (e.range.columnStart != 19 || e.value != "Yes") return;
 const ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1xEEEiLfil1qfetSwZRhr02Q9uoXvWtCxq22JywTu5mo/edit#gid=1554622983").getSheetByName("TDataBase");
 const rData = ss.getRange(e.range.rowStart,1,1,19).getValues();
 var fname = rData[0][1];
 var add = rData[0][3];
 var dist = rData[0][4];
 var state = rData[0][5];
 var pc = rData[0][6];
 var brand = rData[0][10];
 var cal = rData[0][16];
 var email = rData[0][2];

 var tfile = 
 DriveApp.getFileById("1xMWm2CBA2vLkf5GzFQnHRViLVoJZdbebazUgp0OipV4");
 var savefol = DriveApp.getFolderById("1RzjCSdKU9lwxdonGPBPpIob4KVZ2z80-R");
 var tfolder = DriveApp.getFolderById("1MgmGTCf-_RYBZOHloIYJP_9C68kF67I9H");

 const tempFile = tfile.makeCopy("davit for "+fname, folder);
 const tempDocFile = DocumentApp.openById(tempFile.getId());
 const body = tempDocFile.getBody();
  body.replaceText("{{Full name}}", fname);
  body.replaceText("{{Brand}}", brand);
  body.replaceText("{{Address}}", add);
  body.replaceText("{{Dist}}", dist);
  body.replaceText("{{Class}}", cal);
  body.replaceText("{{State}}", state);
  body.replaceText("{{pc}}", pc);
  var ffile = tempDocFile.saveAndClose();


  var url = tempDocFile.exportLinks[MimeType.MICROSOFT_WORD];
  var oauthToken = ScriptApp.getOAuthToken();

  var blob = UrlFetchApp.fetch(url, {
  headers: {
  'Authorization': 'Bearer ' + oauthToken
  }
  }).getBlob().setName(docFile.title+'.docx');

  MailApp.sendEmail('email', 'WORD ATTACHMENT', 'Test', {attachments: blob});

}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    对于 WORD 文档:

      var docFile = Drive.Files.get('file id');
      var url = docFile.exportLinks[MimeType.MICROSOFT_WORD];
      var oauthToken = ScriptApp.getOAuthToken();
    
      var blob = UrlFetchApp.fetch(url, {
        headers: {
          'Authorization': 'Bearer ' + oauthToken
        }
      }).getBlob().setName(docFile.title+'.docx');
    
      MailApp.sendEmail('email', 'WORD ATTACHMENT', 'Test', {attachments: blob});
    
    • 我们使用Advanced Drive API获取var url = docFile.exportLinks[MimeType.MICROSOFT_WORD];中word文档的导出链接。
    • 我们使用 url 链接获取 blob 并使用 UrlFetchApp.fetch().getBlob().setName() 重命名文件

    输出:


    您的代码应该是:

      var newDocFile = Drive.Files.get(tempFile.getId());
      var url = newDocFile.exportLinks[MimeType.MICROSOFT_WORD];
      var oauthToken = ScriptApp.getOAuthToken();
    
      var blob = UrlFetchApp.fetch(url, {
      headers: {
      'Authorization': 'Bearer ' + oauthToken
      }
      }).getBlob().setName(newDocFile.title+'.docx');
    
      MailApp.sendEmail('email', 'WORD ATTACHMENT', 'Test', {attachments: blob});
    

    由于您创建了一个新文件并修改了其内容,我们只需要使用 Drive.Files.get() 及其文件 ID 获取更新后的文档。它应该返回一个File Resource,其中包括exportLinks


    注意:

    您需要先enable advanced services,然后才能使用Advanced Drive API

    如果您使用的是新编辑器:

    1. 打开 Apps 脚本项目。
    2. 点击左侧的编辑器代码。
    3. 在左侧的服务旁边,单击添加服务添加。
    4. 选择一个 Drive API 并点击添加。

    【讨论】:

    • 你好,试过但失败了......你能告诉我我做错了什么吗:
    • 您在var url = tempDocFile.exportLinks[MimeType.MICROSOFT_WORD]; 中使用tempDocFile = DocumentApp.openById(tempFile.getId());。如答案中所述,您需要使用 Advance Drive API 来使用 Drive.Files.get('file id'); 获取文件。它将返回一个包含导出链接的 File Resource
    • 我修改了您的代码并添加了必要的步骤,请查看更新后的答案
    • 非常感谢您的帮助。感谢您的帮助
    【解决方案2】:

    内容类型

    字符串

    要转换为的 MIME 类型。对于大多数 blob,“application/pdf”是唯一有效的选项。对于 BMP、GIF、JPEG 或 PNG 格式的图像,“image/bmp”、“image/gif”、“image/jpeg”或“image/png”中的任何一个都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多