【发布时间】:2016-09-06 00:43:14
【问题描述】:
当我使用 UrlFetchApp 将电子表格导出为 PDF 时,我一直收到 404 - Requested entity not found 响应。如果我将相同的 URL 放入浏览器,PDF 下载会正确启动。
我该怎么做才能让这个示例脚本正常工作?
这是一个 PDF 导出 URL 示例,用于简单的共享(只读)电子表格:https://docs.google.com/spreadsheets/d/133KPZyxAATG3AAY9iCSFWabefyFvQnENkHh0dyqh7MI/export?exportFormat=pdf&format=pdf&gid=0&size=letter&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false
如果您在浏览器中单击该 URL,它会获取一个 PDF Blob,这通常会启动浏览器的文件下载对话框。 (这是一个公共工作表,但在生产中,工作表是私有的。)
function notFunctioning() {
var options = {
headers: {
Authorization:"Bearer "+ScriptApp.getOAuthToken()
},
muteHttpExceptions : true /// Get failure results
}
url = "https://docs.google.com/spreadsheets/d/133KPZyxAATG3AAY9iCSFWabefyFvQnENkHh0dyqh7MI/export?exportFormat=pdf&format=pdf&gid=0&size=letter&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false";
var response = UrlFetchApp.fetch(url, options);
var status = response.getResponseCode();
var result = response.getContentText();
debugger; // status:404 8'(
}
结果字符串的内容是:
抱歉,您请求的文件不存在。
确保您拥有正确的 URL 并且文件的所有者没有删除它。
当然,文件确实存在,等等。我假设我错过了一些身份验证或授权步骤。请注意,此代码与 Convert all sheets to PDF with Google Apps Script 中的代码基本相同,曾在此工作过......
调查:
-
据报道,Issue 5417 与 Execution API 相关,但由于它还涉及文件传输和 Google 的 URL,我认为它包含的建议可能适用。该建议(不是来自 Google,请注意)是为了确保“脚本与您用于身份验证的同一 Google Developer 控制台项目相关联”。我创建了一个新的开发控制台项目,并更改了 Apps Script 应用程序以使用它。虽然这触发了新的授权周期,但它最终并没有修复 404 - 未找到请求的实体。
-
一年前宣布了Google Docs editors URL format change。我使用的是消费者帐户,而不是域帐户,所以这似乎不适用。此外,该脚本自那时以来一直有效。 (不过,我想知道它是否确实会影响某些事情,以及浏览器是否被重定向而 GAS 服务器没有。)
【问题讨论】:
-
@sandwich 不幸的是,非公开表格不会出现这种情况。 (为了这个问题,我把它公开了。)
标签: google-apps-script google-sheets http-error