将电子表格打印为PDF,然后使用OAuth2将文件保存在云端硬盘中

时间:2015-06-02 02:52:29

标签: pdf google-apps-script google-sheets

  function topdf() {
  var foldersave=DriveApp.getFolderById('0Byy1DdsfdfTQRnVlfb05wOV83T00') 
  var d= new Date()

  var oauthConfig = UrlFetchApp.addOAuthService("google");
  var scope = "https://docs.google.com/feeds/";

  //make OAuth connection
  oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oauthConfig.setConsumerKey("anonymous");
  oauthConfig.setConsumerSecret("anonymous");

  //get request
  var request = {
    "method": "GET",
    "oAuthServiceName": "google",
    "oAuthUseToken": "always",
    "muteHttpExceptions": true
  };

  var key='1QUj_OyHisdfsdfjwfNu1l-JuI528ev6FNRJv-oljIY'; 
  var fetch='https://docs.google.com/spreadsheets/d/'+key+'/export?format=pdf&size=A4&portrait=false'

  var name = "Timestamp  for: "+ d + ".pdf";
  var pdf = UrlFetchApp.fetch(fetch, request);
  pdf = pdf.getBlob().setName(name);
  var file = foldersave.createFile(pdf)
}

我正在寻找一步一步的教程,使用OAuth2转换上述代码。我有一些迁移问题。我可以在OAuth2上找到一些代码,但不知道它是如何联系在一起的。之前的代码非常简单,现在看起来要复杂得多吗?或者我错过了一些简单的东西?

我已尝试更换OAuth连接部分,但遇到了问题。 https://github.com/googlesamples/apps-script-oauth2似乎应该以某种方式使用getDriveService

2 个答案:

答案 0 :(得分:4)

您将找到一个功能,可以为您的一张或所有纸张生成并保存PDF Convert all sheets to PDF with Google Apps Script

对于3年前在notice发布的the cellar of the Local Planning Office未见过的人,Google有deprecated OAuth1& OAuth1a对其服务的授权。

在他们的指南Migrating from OAuthConfig to the OAuth1 library中,Apps脚本小组介绍了如何将代码从一个迁移到另一个代码。他们没有提到的是你不需要

有一种更简单的方法,至少是为了访问Google的服务。

您可以使用ScriptApp.getOAuthToken()为当前用户获取OAuth 2.0访问令牌,这意味着以前使用OAuthConfig的任何脚本都会进行简化更改。

转换你的剧本:

  1. 替换

    var request = {
      "method": "GET",
      "oAuthServiceName": "google",
      "oAuthUseToken": "always",
      "muteHttpExceptions": true
    };
    

    var request = {
      "method": "GET",
      headers: {
        'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
      },
      "muteHttpExceptions": true
    };
    
  2. 删除旧OAuthConfig类的每个剩余引用。

    ...
    var oauthConfig = UrlFetchApp.addOAuthService("google");
    var scope = "https://docs.google.com/feeds/";
    
    //make OAuth connection
    oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
    oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
    oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
    oauthConfig.setConsumerKey("anonymous");
    oauthConfig.setConsumerSecret("anonymous");
    ...
    
  3. 这就是它的全部内容。

    如果您使用的是需要OAuth 2.0身份验证的外部(非Google)服务,请按照迁移指南进行操作。

    是的,即使有了库,它也比OAuth1更复杂 - 但必然如此。

答案 1 :(得分:3)

这是改变。由于您使用的是DriveApp,因此您的脚本已拥有从任何来源(包括UrlFetchApp)访问文件的权限。您所要做的就是从脚本中获取令牌并将其传递到您的获取请求的标头中。

function topdf() {
  var foldersave=DriveApp.getFolderById('0Byy1DdsfdfTQRnVlfb05wOV83T00');
  var d= new Date();


  var request = {
    "method": "GET",
    "headers":{"Authorization": "Bearer "+ScriptApp.getOAuthToken()},    
    "muteHttpExceptions": true
  };

  var key='1QUj_OyHisdfsdfjwfNu1l-JuI528ev6FNRJv-oljIY'; 
  var fetch='https://docs.google.com/spreadsheets/d/'+key+'/export?format=pdf&size=A4&portrait=false'

  var name = "Timestamp  for: "+ d + ".pdf";
  var pdf = UrlFetchApp.fetch(fetch, request);
  pdf = pdf.getBlob().setName(name);
  var file = foldersave.createFile(pdf)
}