我有一个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;
}
感谢您的帮助!
答案 0 :(得分:2)
您可以通过ScriptApp.getOAuthToken()
检索,而不是使用OAuthConfig(必须在脚本编辑器中进行身份验证),而是传递OAuth2令牌。
下面的代码段使用Advanced Drive service来获取导出网址,但是如果您手工构建网址,则需要确保脚本仍然请求驱动器范围(只需调用{ {1}}在脚本代码的某处。)
DriveApp.getRootFolder()