使用 google 脚本双击 google sheet 中的单元格提示输入

Prompt input on double click on cell in google sheet using google script

我想在 Google Sheet 中双击单元格时提示输入框。 一个完美的例子是当你保护 ​​Google Sheet 中的一个范围时,任何试图双击受保护范围的人都会得到一个提示消息框。我想用输入框做同样的事情。

我使用的代码的简化版本是:

function editCell(e){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("*** SEARCH ***");
  var lule = sheet.getActiveCell().getValue();
    SpreadsheetApp.flush();

  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt('Edit Contact ', '('+lule+')', ui.ButtonSet.OK_CANCEL);

  // Process the user's response.
  if (response.getSelectedButton() == ui.Button.OK) {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts");
    ss.insertRow(1)
    ss.getRange(1,1).setValue(response.getResponseText());
  }
  else if (response.getSelectedButton() == ui.Button.CANCEL) {
    Logger.log('no');
  }
  else {
  Logger.log('nope');
  }
}

谢谢


更新代码

function setCell(){
  //e.source.toast('flag1');
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  if(sh.getSheetName() == "Contacts" == true){
    Logger.log('nope');
  }
  else if(sh.getSheetName() == "*** SEARCH ***" == true){

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("*** SEARCH ***")
    var cel = sheet.getActiveCell();    
    var val = cel.getValue();    
    var row = cel.getRow();
    var col = cel.getColumn();
    cel.setValue("");
    var lule = sheet.getRange(row,col).getValue();
    var line = sheet.getRange(row,1,1,1).getValue();
    sheet.getRange("A4").setValue(line)
    sheet.getRange("A5").setValue(col)

    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts");
        ss.getRange(line+4,col).setValue(val);

  }
}

这适用于用户编辑的任何单元格:

双击单元格没有生成用户触发器。

Sheet Class 没有名为 insertRow 的方法。

ui.prompt 需要可安装的触发器。

function editCell(e){
  //e.source.toast('flag1');
  var sh=e.range.getSheet();
  if(sh.getName()!="*** SEARCH ***")return;
  var ui=SpreadsheetApp.getUi();
  var response=ui.prompt('Edit Contact','('+ e.value +')',ui.ButtonSet.OK_CANCEL);
  if(response.getSelectedButton()==ui.Button.OK) {
    //e.source.toast('flag2');
    var ss=e.source.getSheetByName("Contacts");
    ss.insertRowBefore(1);//added this
    ss.getRange(1,1).setValue(response.getResponseText());
  }
  else if (response.getSelectedButton()==ui.Button.CANCEL) {
    //e.source.toast('flag3');
    Logger.log('no');
  }
  else {
    //e.source.toast('flag4');
    Logger.log('nope');
  }
}

我找到了解决方法

onEdit 触发此函数

function setCell(){
  //e.source.toast('flag1');
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("*** SEARCH ***")
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts");
  var cel = sheet.getActiveCell();    
  var val = cel.getValue();
  var row = cel.getRow();
  var col = cel.getColumn();

  if(sh.getSheetName() == "Contacts" == true){
    Logger.log('nope');
  }

  else if(sh.getSheetName() == "*** SEARCH ***" == true & row > 7){

    cel.setValue("");
    var lule = sheet.getRange(row,col).getValue();
    var line = sheet.getRange(row,1,1,1).getValue();
    sheet.getRange("A4").setValue(line)
    sheet.getRange("A5").setValue(col)

        ss.getRange(line+4,col).setValue(val);
  }
}

我在边栏上有一个按钮可以触发此功能

function clearCell(){
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("*** SEARCH ***")
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contacts");
  var cel = sheet.getActiveCell();    
  var val = cel.getValue();
  var row = cel.getRow();
  var col = cel.getColumn();

  if(sh.getSheetName() == "Contacts" == true){
    Logger.log('nope');
  }

  else if(sh.getSheetName() == "*** SEARCH ***" == true & row > 7){

    var lule = sheet.getRange(row,col).getValue();
    var line = sheet.getRange(row,1,1,1).getValue();
    sheet.getRange("A4").setValue(line)
    sheet.getRange("A5").setValue(col)
       ss.getRange(line+4,col).clear({contentsOnly: true});
  }
}