表格中的Google脚本:脚本遇到错误(如何获取错误!?)

时间:2013-09-04 00:31:17

标签: google-apps-script google-sheets

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

我必须要离开的是顶部的红色框,上面写着“Script CustomSort遇到错误”,这几乎和人们一样模糊不清!

更深入,以下工作大约一周前,现在已经不再适用了。我至少一个月没有触及剧本。虽然添加了行。我将电子表格恢复到过去工作状态,但它仍然不起作用。

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); 
}

我可以在脚本编辑器中运行脚本而没有错误,但我的理解是它运行带有空表的脚本(是真的吗?),这可能表示表单中存在问题。

如果出现错误甚至是行号,我会立刻意识到这一点!我试图避免撕掉相当大的电子表格或代码来解决这个问题。

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

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

3 个答案:

答案 0 :(得分: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
     }
}

它通常对我有用。

答案 1 :(得分:0)

如果您遇到此类故障,请查看“查看”菜单项下的执行记录。它通常显示上次执行脚本的结果,并指示最后一次运行的行。

答案 2 :(得分:0)

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

有这个(注意ma​​pExport):

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);
};