【问题标题】:Prompt input on double click on cell in google sheet using google script使用谷歌脚本在谷歌工作表中双击单元格时提示输入
【发布时间】:2023-04-01 06:50:02
【问题描述】:

我想在我双击 Google 表格中的一个单元格时提示一个输入框。 完美的例子是当您在 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);

  }
}

【问题讨论】:

  • ss.addrow(1) 是什么意思? addRow() 不是 Sheet 类 (return type of getSheetByName()) 的方法。
  • 我的意思是insertRow(1),这意味着在第 1 行只添加 1 行。它可以在 X、Y 或 Z 行添加一行。
  • insertRow() 也不是一种方法。请在请求他人帮助之前阅读文档并测试您的代码,因为文档包含您需要的方法。我想你要找的是Ui.alert()
  • insertRows() 会让你更满意吗? developers.google.com/apps-script/reference/spreadsheet/…
  • 对不起,我不是想搞笑。 Stackoverflow 是一个供开发人员互相帮助并在文档存在时猜测方法名称的论坛,这为试图帮助您的人们留下了额外的、不必要的工作。查看How to create a Minimal, Reproducible Example

标签: google-apps-script input google-sheets prompt


【解决方案1】:

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

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

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

【讨论】:

  • 我不明白这段代码在做什么。编辑单元格后或双击单元格时是否提示输入框?
  • 您安装了触发器吗?双击不会生成触发器。仅适用于用户编辑。
  • 非常感谢@Cooper。我现在正在尝试使用您的代码作为模板来根据用户编辑来编辑我想要的单元格。它工作正常。现在唯一的问题是,当我使用“删除”键清除单元格时,当我 .getValue() 时,值不是空单元格而是删除前的文本。查看更新代码
【解决方案2】:

我找到了解决方法

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多