URL提取有时会导致" Uncaught ScriptError" RESP。 404

时间:2015-07-27 10:54:20

标签: google-apps-script urlfetch

我的目标是编写一个附加组件,将电子表格文件转换为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文件。然而,我不时在浏览器控制台中收到以下错误消息(从德语翻译成英语),我没有收到任何电子邮件:

"未捕获的ScriptError:请求https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=1iBIny93-y1sSsGxwn78_c-_9EpjIPwMBGa1Ivn1DNKg&exportFormat=xlsx时出错。以下代码得到了回复:404。缩短了服务器答案:" HTML代码中的GOOGLE答案"使用" muteHttpExceptions",阅读整个答案。

我已尝试过其他解决方案但到目前为止没有任何效果。此外,我试图在这个论坛中寻找答案,但是徒劳无功。

似乎网址正确,因为我可以下载该文件。我的假设是oAuth有问题。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢pointNclick的帮助。是的,我尝试过使用muteHttpExceptions。结果是,XLSX文件通过邮件导出和发送,但文件的内容是" HTML代码中的#答案" =关于谷歌文档等。

与此同时,我尝试了其他的东西,这对我有用,我希望我不会遇到新的问题。我插入了" 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 Google Services / Google Developer Console使用任何OAuth库和Drive API。所需的一切都在代码中。我希望这个例子可以帮助其他一些开发人员。