1. ホーム
  2. debugging

[解決済み] Google Apps Scriptのデバッグ方法(別名:Logger.logはどこに記録されるのか?)

2022-04-26 14:29:44

質問

Google Sheetsでは、いくつかのスクリプト機能を追加することができます。のために何かを追加しています。 onEdit というイベントがあるのですが、うまくいっているのかどうかがわかりません。私が知る限り、Google Sheetsからライブイベントをデバッグすることはできないので、デバッガから行う必要がある。 onEdit() 関数から実行すると、常に未定義になります。 Script Editor .

ということで、私が使おうとしていたのは Logger.log メソッドでデータを記録することができます。 onEdit 関数が呼び出されたときにのみ動作するようです。 Script Editor . から実行すると Script Editor にアクセスすると、ログを見ることができます。 View->Logs...

実際にイベントが実行されたときのログが見られると思ったのですが、わからないです。

こんなのどうやってデバッグすればいいんだ?

どのように解決するのですか?

UPDATEしてください。

に書かれているように これ の答えになります。


Logger.log は、スクリプトで発生したエラーを (最終的には) メールで送るか、あるいは Script Editor にアクセスすると、最後に実行した関数のログを見ることができます。 View->Logs (スクリプトエディタのまま)。繰り返しますが、最後に実行した関数から記録されたものだけが表示されます。 の中から Script Editor .

私が動かそうとしていたスクリプトは、スプレッドシートと関係がありました。スプレッドシートのTodo-Checklistタイプのものを作って、優先順位などで項目をソートしていたんです。

そのスクリプトにインストールしたトリガーは、onOpenとonEditだけでした。onEditトリガーのデバッグが一番大変でした。なぜなら、onEdit関数にブレークポイントを設定し、スプレッドシートを開いてセルを編集すれば、ブレークポイントがトリガーされるとずっと思っていたからです。これは事実ではありません。

セルを編集したことをシミュレートするために、私は した 結局、実際のスプレッドシートで何かする必要があるんですけどね。私がしたことは、編集済みとして扱わせたいセルが選択されていることを確認し、次に Script Editor に移動します。 Run->onEdit . そうすれば、私のブレークポイントがヒットするはずです。

しかし、onEdit関数に渡されるevent引数を使うのをやめなければなりませんでした。 Run->onEdit . どのセルが選択されたかなど、スプレッドシートから必要な情報はすべて手動で把握する必要がありました。

とにかく、長い答えになりましたが、最終的には解決しました。


EDIT :

私が作ったTodoチェックリストが見たい方は こちらでご確認ください

(そう、誰でも編集できることは知っています。それが共有することの意義なのです!)

スクリプトも見られるといいんだけど。そこで見ることができないので、ここにあります。

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