使用Google Apps脚本:如何转换/导出云端硬盘文件?

时间:2017-03-19 14:10:25

标签: google-apps-script google-drive-api

我想使用Google Apps脚本将原生Google电子表格/文档/绘图/演示文稿文件导出到同一文件夹中的其他格式。 我启用了Advanced Drive Service,并查看了Open and Convert Google Docs in your app的说明。

希望我可以使用Export来获取File,然后我可以使用Insert保存/重命名。{/ p>

尝试实现以下目标:

var file = {fileId: "1yDe...lD2U", 
            folderId: "0B_...hZ1k", 
            mimetype:"application/vnd.google-apps.document", 
            targetMimetype:"application/pdf", 
            targetName:"my converted document"}
var newFile = Drive.Files.export(file.fileId, file.targetMimetype)

// results in error message:
// "Export requires alt=media to download the exported content."

// I am sure the above is incomplete, but unsure how to actually
// save the exported file, in the correct location, with correct filename

更新:在调用(var newFile = Drive.Files.export(file.fileId, file.targetMimetype, {alt: "media"}))中添加alt = media时,脚本将退出并显示错误代码200,并在错误消息中显示PDF内容。与issue 6573类似。

更新:这可能不太清楚,我想转换为Advanced Drive页面中列出的所有格式,而不仅仅是PDF格式。 DriveApp getAs文档指出DriveApp可以主要转换为PDF和图像。因此,我们专注于使用Advanced Drive而不是DriveApp。

4 个答案:

答案 0 :(得分:2)

作为一种解决方法,我现在使用OAuth2库和直接Drive API。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl" class="row" style="height: 52px;">
  <div class="col col-50" style="border-right: 1px #ccc solid; padding-top: 17px; text-align: center;" ng-click="GetDetails()" id="1">
    <span class="assertive" ng-class="{'active':active.today}" style="margin: 0px;color: #B90143;">TODAY</span>
  </div>

  <div class="col col-50" style="padding-top: 17px;text-align: center;" ng-click="GetTomorrowDetails()">

    <span class="assertive" ng-class="{'active':active.tomorrow}" style="margin: 0px;color: #B90143; width: 100%;">TOMORROW</span>
  </div>
</div>

答案 1 :(得分:0)

你非常接近。只需将pdf内容用作多部分插入/发布的部分之一。

答案 2 :(得分:0)

尝试从Armit Agarwal调整this code。将驱动器文件导出为PDF的重要部分是代码的一部分:

var blob = DriveApp.getFileById(ss.getId()).getAs("application/pdf");

  blob.setName(ss.getName() + ".pdf"); 

然后您可以通过附上pdf文件将其发送到您的电子邮箱:

// If allowed to send emails, send the email with the PDF attachment
  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, subject, body, {
      htmlBody: body,
      attachments:[blob]     
    });  

查看指南以获取更多参考。

答案 3 :(得分:0)

这是Google人员从https://issuetracker.google.com/issues/36765129#comment8提供的正确解决方案。

  

Files.export()最近已添加到Drive v2 API,但是另一种方法是改用较旧的File.exportLinks字段。这是一个示例:

function convertToDocx(documentId) { 
  var file = Drive.Files.get(documentId); 
  var url = file.exportLinks['application/vnd.openxmlformats-officedocument.wordprocessingml.document']; 
  var oauthToken = ScriptApp.getOAuthToken(); 
  var response = UrlFetchApp.fetch(url, { 
    headers: { 
      'Authorization': 'Bearer ' + oauthToken 
    } 
  }); 
  return response.getBlob(); 
}