我正在尝试检索电子表格的pdf。每当我尝试时,都会出现以下错误:
请求失败,网址为https://docs.google.com/a/firstcallres.com/spreadsheets/d/1ZPcW5cOQT5w28VUbr_JG9U-r7m6Uf-MDQcSmFOyhbE8/export?exportFormat=pdf&format=pdf&size=letter&portrait=false&fitw=true&source=name&source=lab& = false&fzr = false&gid = 1680655368返回了代码404。
如果登录时单击上面的URL,则会下载PDF。
如果使用以下代码,我将获得一个登录页面作为响应。的URL
是片材的URL,并且url_ext
是参数。
var response = UrlFetchApp.fetch(url + url_ext);
如果我随后将以下代码与OAuth令牌一起使用,则会收到404响应。
var response = UrlFetchApp.fetch(url + url_ext, {
headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }
});
为什么会这样呢?如何使用令牌通过应用脚本访问工作表以检索PDF?
编辑:它自发地开始在我的测试应用程序脚本上工作。但是,如果我在另一个应用程序脚本中创建完全相同的功能,它将再次失败并出现404错误。
我做了一些其他的故障排除,然后将工作功能复制粘贴到了新的应用程序脚本项目中。该功能成功运行,此后不工作的功能现在可以工作了。
在失败和正常运行之间,没有对非正常运行的功能进行过任何编辑。
Edit2:我可以重现此错误:如果我使用第二个工作功能,然后复制-将其粘贴到新项目中,它将失败并显示404错误。我不知道为什么会这样,但是当它在完全相同的代码在其他地方工作时,我可以成功重现404错误。
您缺少发出此请求的适当范围。它应该返回未经身份验证的401而不是404。要解决此问题,您需要添加Drive范围。我通过DriveApp.getRootFolder()
在脚本中的某个位置进行简单调用来实现此目的。这会将驱动器作用域添加到您的项目中。任何对DriveApp的调用都会添加作用域。
这是一个示例脚本:
function exportToPDF() {
var url = "https://docs.google.com/spreadsheets/d/1oQ2zsbcCwuc_wdwgfFopRJn-5fGN3oY7L237ivxuxmM/export?exportFormat=pdf"; //add your options as you wish
var res = UrlFetchApp.fetch(url, {headers:{"Authorization":"Bearer " + ScriptApp.getOAuthToken()},muteHttpExceptions:true});
var newPdf = Utilities.newBlob(res.getContent(), "application/pdf", "Export.pdf")
DriveApp.createFile(newPdf);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句