本文介绍了如何调试 Google Apps 脚本(又名 Logger.log 记录到哪里?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Google 表格中,您可以添加一些脚本功能.我正在为 onEdit 事件添加一些东西,但我不知道它是否有效.据我所知,您无法从 Google Sheets 调试实时事件,因此您必须从调试器进行调试,这是毫无意义的,因为事件参数传递给了我的 onEdit() 函数如果我从 Script Editor 运行它,它将始终未定义.

In Google Sheets, you can add some scripting functionality. I'm adding something for the onEdit event, but I can't tell if it's working. As far as I can tell, you can't debug a live event from Google Sheets, so you have to do it from the debugger, which is pointless since the event argument passed to my onEdit() function will always be undefined if I run it from the Script Editor.

所以,我试图使用 Logger.log 方法在 onEdit 函数被调用时记录一些数据,但这似乎也只在运行时有效来自 脚本编辑器.当我从 Script Editor 运行它时,我可以通过转到 View->Logs...

So, I was trying to use the Logger.log method to log some data whenever the onEdit function gets called, but this too seems like it only works when run from the Script Editor. When I run it from the Script Editor, I can view the logs by going to View->Logs...

我希望能够看到事件实际执行时的日志,但我无法弄清楚.

I was hoping I'd be able to see the logs from when the event actually gets executed, but I can't figure it out.

我如何调试这些东西?

推荐答案

更新:

这个答案中所写,

  • Stackdriver Logging is the preferred method of logging now.

使用console.log() 登录到 Stackdriver.

Use console.log() to log to Stackdriver.

Logger.log 将向您发送一封电子邮件(最终)您的脚本中发生的错误,或者,如果您正在从 脚本编辑器 运行,您可以通过转到 View->Logs(仍在脚本编辑器中)查看上次运行函数的日志.同样,这只会显示您从 Script Editor 内部运行的最后一个函数记录的任何内容.

Logger.log will either send you an email (eventually) of errors that have happened in your scripts, or, if you are running things from the Script Editor, you can view the log from the last run function by going to View->Logs (still in script editor). Again, that will only show you anything that was logged from the last function you ran from inside Script Editor.

我尝试使用的脚本与电子表格有关 - 我制作了一个电子表格待办事项清单类型的东西,按优先级等对项目进行排序.

The script I was trying to get working had to do with spreadsheets - I made a spreadsheet todo-checklist type thing that sorted items by priorities and such.

我为该脚本安装的唯一触发器是 onOpen 和 onEdit 触发器.调试 onEdit 触发器是最难弄清楚的,因为我一直在想,如果我在 onEdit 函数中设置断点,打开电子表格,编辑单元格,我的断点就会被触发.事实并非如此.

The only triggers I installed for that script were the onOpen and onEdit triggers. Debugging the onEdit trigger was the hardest one to figure out, because I kept thinking that if I set a breakpoint in my onEdit function, opened the spreadsheet, edited a cell, that my breakpoint would be triggered. This is not the case.

为了模拟编辑了一个单元格,我确实最终不得不在实际的电子表格中做一些事情.我所做的就是确保选择了我希望它视为已编辑"的单元格,然后在 Script Editor 中,我将转到 Run->onEdit.然后我的断点就会被命中.

To simulate having edited a cell, I did end up having to do something in the actual spreadsheet though. All I did was make sure the cell that I wanted it to treat as "edited" was selected, then in Script Editor, I would go to Run->onEdit. Then my breakpoint would be hit.

但是,我确实不得不停止使用传递给 onEdit 函数的事件参数 - 您无法通过执行 Run->onEdit 来模拟它.我需要从电子表格中获取任何信息,例如选择了哪个单元格等,我都必须手动找出.

However, I did have to stop using the event argument that gets passed into the onEdit function - you can't simulate that by doing Run->onEdit. Any info I needed from the spreadsheet, like which cell was selected, etc, I had to figure out manually.

无论如何,答案很长,但我最终想通了.

Anyways, long answer, but I figured it out eventually.

编辑:

如果您想查看我制作的待办事项清单,您可以在这里查看

If you want to see the todo checklist I made, you can check it out here

(是的,我知道任何人都可以编辑它——这就是分享它的意义所在!)

(yes, I know anybody can edit it - that's the point of sharing it!)

我希望它也能让你看到脚本.因为你在那里看不到它,所以在这里:

I was hoping it'd let you see the script as well. Since you can't see it there, here it is:

function onOpen() {
  setCheckboxes();
};

function setCheckboxes() {
  var checklist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("checklist");
  var checklist_data_range = checklist.getDataRange();
  var checklist_num_rows = checklist_data_range.getNumRows();
  Logger.log("checklist num rows: " + checklist_num_rows);

  var coredata = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
  var coredata_data_range = coredata.getDataRange();

  for(var i = 0 ; i < checklist_num_rows-1; i++) {
    var split = checklist_data_range.getCell(i+2, 3).getValue().split(" || ");
    var item_id = split[split.length - 1];
    if(item_id != "") {
      item_id = parseInt(item_id);
      Logger.log("setting value at ("+(i+2)+",2) to " + coredata_data_range.getCell(item_id+1, 3).getValue());
      checklist_data_range.getCell(i+2,2).setValue(coredata_data_range.getCell(item_id+1, 3).getValue());
    }
  }
}

function onEdit() {
  Logger.log("TESTING TESTING ON EDIT");
  var active_sheet = SpreadsheetApp.getActiveSheet();
  if(active_sheet.getName() == "checklist") {
    var active_range = SpreadsheetApp.getActiveSheet().getActiveRange();
    Logger.log("active_range: " + active_range);
    Logger.log("active range col: " + active_range.getColumn() + "active range row: " + active_range.getRow());
    Logger.log("active_range.value: " + active_range.getCell(1, 1).getValue());
    Logger.log("active_range. colidx: " + active_range.getColumnIndex());
    if(active_range.getCell(1,1).getValue() == "?" || active_range.getCell(1,1).getValue() == "?") {
      Logger.log("made it!");
      var next_cell = active_sheet.getRange(active_range.getRow(), active_range.getColumn()+1, 1, 1).getCell(1,1);
      var val = next_cell.getValue();
      Logger.log("val: " + val);
      var splits = val.split(" || ");
      var item_id = splits[splits.length-1];
      Logger.log("item_id: " + item_id);

      var core_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
      var sheet_data_range = core_data.getDataRange();
      var num_rows = sheet_data_range.getNumRows();
      var sheet_values = sheet_data_range.getValues();
      Logger.log("num_rows: " + num_rows);

      for(var i = 0; i < num_rows; i++) {
        Logger.log("sheet_values[" + (i) + "][" + (8) + "] = " + sheet_values[i][8]);
        if(sheet_values[i][8] == item_id) {
          Logger.log("found it! tyring to set it...");
          sheet_data_range.getCell(i+1, 2+1).setValue(active_range.getCell(1,1).getValue());
        }
      }

    }
  }

  setCheckboxes();
};

这篇关于如何调试 Google Apps 脚本(又名 Logger.log 记录到哪里?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 11:47