如何使用特定范围的 onEdit 触发器构建脚本,在单元格中插入带有时间戳的注释?
How can I build script with an onEdit Trigger for a specific range, insert note in the cell, with timestamp?
我是编码初学者,所以任何建议或指导都会很有帮助。我正在编写一个脚本,该脚本将 onEdit () 用于特定的 range/column.
一旦 onEdit () 触发了我假设的 if 语句,就会出现自定义对话框提示以插入注释。键入注释后,它会标记您选择的数据验证并将其作为注释插入带有时间戳的单元格中。
这是我针对这个问题制作的示例 sheet:
https://docs.google.com/spreadsheets/d/12-b4pUK5xKqlLlOKvPxd-UZ__RaJMiEWXHPH5K9GvU4/edit?usp=sharing
欢迎提问!
function onEdit() {
var ss = SpreadsheetApp.getActiveSheet().getActiveRange();
var select = ss.getDisplayValue();
if (select = 'Phone'){
var ui = SpreadsheetApp.getUi();
var name = Session.getActiveUser();
var cell = ss.getDisplayValue()
var timestamp = Utilities.formatDate(new Date(), "EST", "MMM dd");
var pnote = ss.getNote()
Logger.log(timestamp);
var result = ui.prompt(
'Would you like to add a short note?',
'',
ui.ButtonSet.OK_CANCEL);
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
var notes = [
[pnote],
[timestamp +": "+name + ": "+cell +": "+text+'.']
];
if (button == ui.Button.OK) {
// User clicked "OK".
ss.setNote(notes);
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('You did not set a note.');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('You closed the dialog.');
}
} else {
Logger.log("Cell was out of range");
}
}
//Attempt 2 (no luck) would replace the first portion of script up to if statement.
// var ss = SpreadsheetApp.getActiveSheet().getActiveRange();
// var column = ss.getColumn();
// var actionColumn = [3]
//
// if (actionColumn.indexOf(column) = 3){
我的问题是如何让这个脚本仅在特定列中选择了数据验证时才被触发。也许下一个工作可能是使用多个 if 语句来自定义对话问题和注释。
提前致谢!
您可以使用 onEdit 触发器的 e
参数。 Read about event objects here
将e
参数添加到函数中,然后使用if
语句检查编辑是否发生在指定sheet的指定列上。
在此示例中,如果编辑发生在列 B 上,则 if
为真,列 B 是 Sheet1
的索引 2
。
function onEdit(e){
if(e.source.getSheetName() == "Sheet1" && e.range.getColumn() == 2){
您必须在 onEdit 中有一个 if-condition 来检查行数、列数。
例如,您只希望 onEdit 在单元格 F5 (5,6) 上触发,您可以这样做:
function onEdit(e){
var range = e.range;
if(range.getRow() == 5 && range.getColumn() == 6){
range.setNote('ROW: ' + range.getRow() + " COLUMN: "+ range.getColumn());
//additional code . . . Do what you want..
}
}
只需修改其他单元格、列等的代码
我是编码初学者,所以任何建议或指导都会很有帮助。我正在编写一个脚本,该脚本将 onEdit () 用于特定的 range/column.
一旦 onEdit () 触发了我假设的 if 语句,就会出现自定义对话框提示以插入注释。键入注释后,它会标记您选择的数据验证并将其作为注释插入带有时间戳的单元格中。
这是我针对这个问题制作的示例 sheet: https://docs.google.com/spreadsheets/d/12-b4pUK5xKqlLlOKvPxd-UZ__RaJMiEWXHPH5K9GvU4/edit?usp=sharing
欢迎提问!
function onEdit() {
var ss = SpreadsheetApp.getActiveSheet().getActiveRange();
var select = ss.getDisplayValue();
if (select = 'Phone'){
var ui = SpreadsheetApp.getUi();
var name = Session.getActiveUser();
var cell = ss.getDisplayValue()
var timestamp = Utilities.formatDate(new Date(), "EST", "MMM dd");
var pnote = ss.getNote()
Logger.log(timestamp);
var result = ui.prompt(
'Would you like to add a short note?',
'',
ui.ButtonSet.OK_CANCEL);
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
var notes = [
[pnote],
[timestamp +": "+name + ": "+cell +": "+text+'.']
];
if (button == ui.Button.OK) {
// User clicked "OK".
ss.setNote(notes);
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('You did not set a note.');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('You closed the dialog.');
}
} else {
Logger.log("Cell was out of range");
}
}
//Attempt 2 (no luck) would replace the first portion of script up to if statement.
// var ss = SpreadsheetApp.getActiveSheet().getActiveRange();
// var column = ss.getColumn();
// var actionColumn = [3]
//
// if (actionColumn.indexOf(column) = 3){
我的问题是如何让这个脚本仅在特定列中选择了数据验证时才被触发。也许下一个工作可能是使用多个 if 语句来自定义对话问题和注释。
提前致谢!
您可以使用 onEdit 触发器的 e
参数。 Read about event objects here
将e
参数添加到函数中,然后使用if
语句检查编辑是否发生在指定sheet的指定列上。
在此示例中,如果编辑发生在列 B 上,则 if
为真,列 B 是 Sheet1
的索引 2
。
function onEdit(e){
if(e.source.getSheetName() == "Sheet1" && e.range.getColumn() == 2){
您必须在 onEdit 中有一个 if-condition 来检查行数、列数。
例如,您只希望 onEdit 在单元格 F5 (5,6) 上触发,您可以这样做:
function onEdit(e){
var range = e.range;
if(range.getRow() == 5 && range.getColumn() == 6){
range.setNote('ROW: ' + range.getRow() + " COLUMN: "+ range.getColumn());
//additional code . . . Do what you want..
}
}
只需修改其他单元格、列等的代码