URL fetch 有时会导致 "Uncaught ScriptError" resp。 404

URL fetch sometimes leads to "Uncaught ScriptError" resp. 404

我的目标是编写一个插件,将电子表格文件转换为 XLSX 文件,并每天、每周或每月将其发送到给定的邮件分发列表。

一切正常,除了 URL 获取。请在下面找到我的功能:

function startWizard () {
var addresses = SpreadsheetApp.getActive().getSheetByName("Einstellungen").getRange("A1").getValues();
var filename = SpreadsheetApp.getActiveSpreadsheet().getName();
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
var url = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=" + ssID + "&exportFormat=xlsx"; 
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {headers: {'Authorization': 'Bearer '+ token}});
Logger.log(url);
var contents = response.getContent();

MailApp.sendEmail(addresses,"subject" ,"body", {attachments:[{fileName:filename+".xlsx", content:contents, mimeType:"application//xlsx"}]});
}

大多数时候一切正常,我收到一封电子邮件和附件中的 XLSX 文件。然而,有时我会在我的浏览器控制台中收到以下错误消息(从德语翻译成英语)并且我没有收到任何电子邮件:

"Uncaught ScriptError: Error at the request for https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=1iBIny93-y1sSsGxwn78_c-_9EpjIPwMBGa1Ivn1DNKg&exportFormat=xlsx. The following code was responded: 404. Shortened server answer: "GOOGLE HTML 代码中的答案”使用 "muteHttpExceptions" 阅读整个答案。

我已经尝试过其他解决方案,但目前没有任何效果。另外我试图在这个论坛中搜索答案,但没有成功。

好像URL是对的,我可以下载文件了。我的假设是 oAuth 有问题。

有人可以给我提示吗?这让我发疯...

谢谢!

感谢 pointNclick 的帮助。是的,我尝试使用 muteHttpExceptions。结果是,XLSX 文件被导出并通过邮件发送,但文件的内容是 "GOOGLE ANSWER IN HTML CODE" = 关于 google 文档等

与此同时,我尝试了一些对我有用的其他方法,我希望我不会遇到新的问题。我插入了 "DriveApp.getRootFolder();" 这是新代码,以防有人遇到同样的问题:

function startWizard () {
  var addresses = SpreadsheetApp.getActive().getSheetByName("Einstellungen").getRange("A1").getValues();
  var filename = SpreadsheetApp.getActiveSpreadsheet().getName();
  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var url ="https://docs.google.com/spreadsheets/d/"+ssID+"/export?format=xlsx&id="+ssID;
  DriveApp.getRootFolder();
  var token2 = ScriptApp.getOAuthToken();
  var response = UrlFetchApp.fetch(url, {
  headers: {'Authorization': 'Bearer ' +  token2}});
  var contents = response.getContent();

  MailApp.sendEmail(addresses,"subject" ,"body", {attachments:[{fileName:filename+".xlsx", content:contents, mimeType:"application//xlsx"}]});
}

因为我花了很多时间来解决这个问题并启动 OAuth 运行,我想提一下,我没有通过 Advanced 使用任何 OAuth 库和 Drive API Google 服务 / Google 开发者控制台。所需的一切都在代码中。我希望这个例子能帮助其他一些开发者。