我正在努力工作的腳本與電子表格有關 - 我製作了一個電子表格待辦事項清單類型的東西,按優先順序排序項目等。
我爲該腳本安裝的唯一觸發器是onOpen和onEdit觸發器。調試onEdit觸發器是最難解決的問題,因爲我一直在想,如果我在onEdit函數中設置斷點,打開電子表格,編輯單元格,我的斷點將被觸發。不是這種情況。
爲了模擬編輯了一個單元格,我確實最終不得不在實際的電子表格中做些什麼。我所做的只是確保我想要它處理爲「編輯」的單元格被選中,然後在Script Editor
中,我會去Run->onEdit
。然後我的斷點會被擊中。
但是,我不得不停止使用傳入onEdit函數的事件參數 - 您無法通過執行Run->onEdit
來模擬該事件。我需要從電子表格中獲取任何信息,例如選擇了哪個單元格等,我不得不手動弄清楚。
不管怎麼說,很長的答案,但我終於明白了。
編輯:
如果你想看到的待辦事項清單,我做了,你可以check it out here
(是的,我知道任何人都可以編輯它 - 這是共享的地步! )
我希望它能讓你看到腳本。既然你不能看到它在那裏,那就是:
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();
};
同樣的問題 - 接受的答案沒有回答,但給出了大量的明顯的錯誤信息。 – Hippyjim 2013-11-09 16:19:31
看來他們現在修復了這個問題。只要您從電子表格中打開腳本編輯器,當您在工作表中運行這些內容時,請將該選項卡打開。然後返回到腳本選項卡,它將包含日誌信息。 – phreakhead 2017-01-22 02:15:35
tldr;複製,粘貼並運行Logger.log('firstLog'); MailApp.sendEmail({to:'yourEmailAddressHere @ someone.com',subject:「subject here^_ ^」,body:Logger.getLog()}) ;' – 2017-05-26 16:52:19