5

我的问题很简单:你如何得到错误信息!?

我所要做的只是顶部的红色框,上面写着“Script CustomSort Experienced an Error”,这几乎是最模糊的!

更深入地说,以下工作大约一周前有效,现在不再有效。我至少有一个月没碰剧本了。虽然已经添加了行。我将电子表格恢复到以前可以工作的状态,但它仍然无法工作。

function onOpen() 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Custom Sort", functionName: "CustomSort"}];
  ss.addMenu("Sort", menuEntries);

  CustomSort();
}

function CustomSort() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(2,1,sheet.getMaxRows()-1,sheet.getMaxColumns()); 

  var headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues();
  var sortOrder = new Array;
  sortOrder.push({ column: headers[0].indexOf("Completion Date")+1, ascending: true });
  sortOrder.push(headers[0].indexOf("Owner")+1);
  sortOrder.push(headers[0].indexOf("Tentative Due Date")+1);
  sortOrder.push({ column: headers[0].indexOf("Priority")+1, ascending: false });
  sortOrder.push(headers[0].indexOf("Department")+1);

  range.sort(sortOrder); 
}

我可以在脚本编辑器中毫无错误地运行脚本,但我的理解是它使用空工作表运行脚本(这是真的吗?),这可能表明工作表中存在问题。

如果出现错误甚至是行号,我会很快弄清楚!我试图避免撕开相当大的电子表格或代码来解决这个问题。

我做了一堆谷歌搜索,有很多类似问题是谷歌问题的参考,但我认为这个问题已经存在了好几天。

(我的日志记录也没有运气,这进一步限制了我的调试能力。总之,我觉得我在调试工具部门有障碍。我唯一的策略是将所有内容简化为最简单的测试用例,然后慢慢一次添加一行代码或一行电子表格,直到它爆炸。当然必须有更好的方法;哦,伟大的互联网,请给我你的智慧!)

4

3 回答 3

3

嗯,最好的'ol try-catch +电子邮件或记录器如何至少获得错误提示,而不是在调试器中仔细观察数据进行调试(可疑行处的断点,查看数据状态,逐步调试):

function calculateSmthng()
{
  try {
       makeHardWorkForMe();
      } 
  catch (e) {
      MailApp.sendEmail("me@example.com", "Error report from ...", e.message); //either with e-mail
      Logger.log("Bad thing happened, catched at calculateSmthng(): " +e.message); //or logger
     }
}

它通常对我有用。

于 2013-09-25T09:20:02.940 回答
0

当您遇到这样的失败时,请检查“查看”菜单项下的执行记录。它通常显示最后一次执行脚本的结果,并指示最后一次运行的行。

于 2013-09-07T15:41:10.287 回答
0

我知道这是一个旧帖子,但对于其他人找到它的情况。我收到此错误是因为我未能将函数名称放在引号中!

有这个(注意mapExport):

function onOpen() {
  var sheet   = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{name:'Update Map Export', functionName: mapExport}];
  sheet.addMenu("Build Export", entries);
};

而不是这个:

function onOpen() {
  var sheet   = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{name:'Update Map Export', functionName: 'mapExport'}];
  sheet.addMenu("Build Export", entries);
};
于 2021-01-22T19:57:10.347 回答