在Google Apps脚本中将Sheet导出为XLS时出现OAuth错误

时间:2014-05-01 05:46:23

标签: oauth google-apps-script

我有一个Google Apps脚本,可以从我的Google日历中获取约会,将其复制到Google表格中,将其转换为XLS并通过电子邮件发送给我。它本周工作正常。

最初的问题是302错误,可能是由新版本的Sheets引起的。这已在此处讨论过:Export (or print) with a google script new version of google spreadsheets to pdf file, using pdf options

我通过静音HTTP异常并相应地调整URL来获取文件的新位置。我还根据建议将OAuth范围更新为https://docs.google.com/feeds/

程序失败并显示“OAuth错误”消息。当muteHttpExceptions设置为true时,消息为“无法对服务进行身份验证:google”。

我想这是一个范围问题,但我真的看不出我做错了什么。当然,我没有运气就尝试了其他一些可能性。

我已经包含了以下代码。注释代码是本周工作的指令。

function getSSAsExcel(ssID)
{
  var format = "xls";

  //var scope = "https://spreadsheets.google.com/feeds/";
  var scope = "https://docs.google.com/feeds/";
  var oauthConfig = UrlFetchApp.addOAuthService("google");
  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");

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

  //var url = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=" + ssID
  var url = "https://docs.google.com/spreadsheets/d/" + ssID 
      + "/feeds/download/spreadsheets/Export?"
      + "&size=A4" + "&portrait=true" +"&fitw=true" + "&exportFormat=" + format;

  var result = UrlFetchApp.fetch(url , requestData);
  var contents = result.getContent();

  return contents; 
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以通过ScriptApp.getOAuthToken()检索,而不是使用OAuthConfig(必须在脚本编辑器中进行身份验证),而是传递OAuth2令牌。

下面的代码段使用Advanced Drive service来获取导出网址,但是如果您手工构建网址,则需要确保脚本仍然请求驱动器范围(只需调用{ {1}}在脚本代码的某处。)

DriveApp.getRootFolder()