如何使用onEdit Trigger为特定范围构建脚本,在单元格中插入注释,并带有时间戳?

时间:2018-04-04 01:28:34

标签: google-apps-script google-sheets-api

我是编码的初学者,所以任何建议或指导都会非常有用。我正在编写一个脚本,它使用onEdit()来表示特定的范围/列。

一旦onEdit()触发了我假设的if语句,就会出现一个自定义对话框提示,插入一个音符。键入注释后,它将标记您选择的数据验证,并将其作为注释插入带有时间戳的单元格。

这是我为这个问题制作的样本表: 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语句来定制对话框问题&注释。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

你必须在onEdit中有一个if条件来检查行数,列。

例如,你只想在单元格F5(5,6)上触发onEdit,你可以这样做:

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..
    }
}

只需修改其他单元格,列等的代码

答案 1 :(得分:0)

您可以使用onEdit触发器的e参数。 Read about event objects here

e参数添加到函数中,然后使用if语句检查编辑是否发生在指定工作表的指定列上。

在此示例中,如果编辑发生在B列上,则if为真,col B为2的索引Sheet1

function onEdit(e){
  if(e.source.getSheetName() == "Sheet1" && e.range.getColumn() == 2){