我正在使用Google电子表格和Google脚本发送自动报告。
到目前为止它完美运作。但不知何故,当我尝试创建一个要通过电子邮件发送的新报告时,“UrlFetchApp.fetch”函数返回404.当我尝试复制旧报告时,也发生了同样的情况。
“UrlFetchApp.fetch”行给出了这个错误:
https://docs.google.com/spreadsheets/d/1qm_bCKn4MbLKy7AIuIeu7bTZcTk8ObYBln0GAxwfsX8/pub?gid=195635557&single=true&output=pdf返回的代码404请求失败。截断的服务器响应
似乎我不是唯一一个遇到此问题的人,但我找不到任何解决办法。
以下是代码:
function emailSpreadsheetAsCSV() {
var ss = SpreadsheetApp.openById("1qm_bCKn4MbLKy7AIuIeu7bTZcTk8ObYBln0GAxwfsX8");
var url = ss.getUrl();
url = url.replace(/edit$/,'');
var token = ScriptApp.getOAuthToken();
var sheets = ss.getSheets();
//make an empty array to hold your fetched blobs
var blobs = [];
for (var i=0; i<sheets.length; i++) {
var response = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/1qm_bCKn4MbLKy7AIuIeu7bTZcTk8ObYBln0GAxwfsX8/pub?gid=195635557&single=true&output=pdf", {
headers: {
'Authorization': 'Bearer ' + token
},
'muteHttpExceptions': false
});
//convert the response to a blob and store in our array
blobs[i] = response.getBlob().setName(sheets[i].getName() + '.csv');
}
//create new blob that is a zip file containing our blob array
var zipBlob = Utilities.zip(blobs).setName(ss.getName() + '.zip');
return blobs[0];
}
非常感谢你的帮助。
艾默里克。
答案 0 :(得分:2)
我也遇到了这个问题,经过一些研究,Spence Easton(问题34573295)解决了我的问题。我只是将这个伪造的调用添加到驱动器中,因此授予访问权限,因此脚本现在可以访问您的文件。 在尝试抓取网址之前将其添加到顶部附近:
var bogus = DriveApp.getRootFolder();
现在它运行良好,没有404错误。
答案 1 :(得分:0)
您使用“pub”网址,因此您确定电子表格是在网上发布的吗?如果您获得404,则表示该页面未发布。 如果文件被公布,则不需要持票人,因为它现在是公开的。
在我不理解您的代码后,因为您迭代了文件的所有工作表
for (var i=0; i<sheets.length; i++)
但你的urlfetch中的url的参数“gid”(pub?gid = 195635557&amp; single = true&amp; output = pdf)是否已修复?
第二点,您将文件作为pdf并在创建csv后生成?
为什么不直接将文件作为csv:https://docs.google.com/spreadsheets/export?id=TheIdOfTheFile&exportFormat=csv
通过调整此代码,您可以直接获取csv,请参阅:https://stackoverflow.com/a/28503601/3556215
注意你会得到第一页而不是其他页面。
斯特凡
答案 2 :(得分:0)
尝试:
var response = UrlFetchApp.fetch(url, options);
var result = JSON.parse(res.getContentText());