如何在Google表格中下载驱动器非谷歌文件(例如PDF)

时间:2016-02-22 09:28:13

标签: google-apps-script

您好我已经尝试了一段时间,但无法找到此自动化的修复程序。

我有一个电子表格应用,用于跟踪为客户执行的工作。每个作业都是电子表格中的一行,它可以在作业完成时在驱动器中生成PDF发票。

现在,我想改进发票自动化。我想在谷歌工作表中添加一个“下载发票”菜单项,开始下载pdf到本地计算机,以便以后发送到客户端。我目前手动执行此阶段,它有点容易出错。

我知道如何添加菜单项,以便位好。

我的downloadFile功能在下面,从查看日志看起来工作正常 - 它返回http 200和53000字节(正确大小)但没有文件出现。当我点击菜单时,我想要的是“保存为对话框”。

我怀疑我必须将下载与GUI组件相关联,但不确定如何进展。

/** start a download dialog for a PDF file so I can save it on the c: drive */
function downloadFile()
{
  // invoicesFolderID is the folder ID defined elsewhere
  var theFolder = DriveApp.getFolderById(invoicesFolderID);
  Logger.log("reading from folder: " + theFolder.getName() + " " + theFolder.getId());

  // fixed filename for testing
  var filename = "Invoice_xyz.pdf";
  var matchingFileList = theFolder.getFilesByName(filename);
  Logger.log("matchingFileList: has files? " + matchingFileList.hasNext());

  // don't allow duplicates
  if (matchingFileList.hasNext())
  {
    f = matchingFileList.next()    
    Logger.log("filename=" + f.getName());
    Logger.log("ID="       + f.getId());
    Logger.log("URL="      + f.getDownloadUrl());

    var options = {
      headers: {
        "Authorization": "Bearer " + ScriptApp.getOAuthToken(),
        // tried various http methods
        "method" : "get",
      }  
    };

    // believe that alt=media needs to be added for pdf files
    var httpResp = UrlFetchApp.fetch(f.getDownloadUrl() + "?alt=media", options);
    Logger.log("http repsonse " + httpResp.getResponseCode());
    Logger.log("http headers  " + httpResp.getHeaders().toSource());
    Logger.log("http headers len  " + httpResp.getContent().length);
    // tried adding this 
    //var pdf = httpResp.getAs('application/pdf');

  }
}

1 个答案:

答案 0 :(得分:0)

简短回答

使用getDownloadUrl()获取用于下载文件的URL,然后将该URL添加到用户点击的UI链接或按钮。

说明

getDownloadURL 将返回一个可以在短时间内使用的临时网址。

StackOverflow中有几个Q& A引用Class Anchor。请记住,它现在已被弃用。

相关

Unable to serve download links in google apps script