在使用脚本的Google电子表格中,如何强制刷新用户的输入?

时间:2013-03-11 16:50:17

标签: google-apps-script google-sheets

我想知道是否可以强制从脚本中刷新用户输入。

上下文如下:我有一张表,人们应该输入数据,还有一个按钮,当他们完成后点击它们,这将处理数据。

有时人们双击一个单元格,写下他们想要的东西,然后在点击返回之前点击按钮。因此,脚本看到单元格仍为空。

是否有办法强制刷新当前键入的内容,或检测当前正在编辑某个单元格?

干杯,

维克多

5 个答案:

答案 0 :(得分:1)

在按Enter键或选择其他单元格之前,单元格永远不会被“编辑”。因此,您可以指示他们单击另一个单元格,或在单击按钮之前按Enter键。我知道这不是最好的解决方案。但是没有办法检测用户将要进入单元格的内容。

您可以将其设为他们点击的菜单选项。单击菜单项(请参阅addMenu)将文本写入电子表格,以便您在使用菜单功能时可以阅读该文本。同样,这可能不是最佳解决方案,但它仍然是一种解决方案。

答案 1 :(得分:0)

如果强制应用程序激活此单元格,则可以将新值提取到内存中,例如:

X IN (A,B)

答案 2 :(得分:0)

我有同样的问题。 对我有用的解决方案: 在按钮触发的脚本中,我添加了一些代码来激活电子表格中的另一个工作表:

  function buttonScript() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('A_DIFFERENT_SHEET'), true);
  // REST OF THE CODE in your script
  }

显然,这会强制在单元格中“输入”用户输入。

答案 3 :(得分:0)

问了6年后,但很幸运的是,我遇到了同样的问题,并尝试了所有人的选择。像评论一样,它有时可以起作用,有时却不能。

因此,我只是做了一个if else语句,以确保所有条目都不为空,然后才运行代码。

function move() {

  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PROCESS');
  var source_range = source.getRange(3, 15, 1, 6).getValues();

  var target = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SUBMISSIONS');
  var target_range = target.getRange(target.getLastRow() + 1, 2, 1, 6);

  var check = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
  var check_order = check.getRange(7, 15, 1, 1);
  var check_firstname = check.getRange(9, 15, 1, 1);
  var check_lastname = check.getRange(11, 15, 1, 1);
  var check_email = check.getRange(13, 15, 1, 1);

   if (check_order.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_firstname.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_lastname.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else if ( check_email.getValue() === '' ) {
    Browser.msgBox('Error','Please make sure all fields are filled.', Browser.Buttons.OK);
    } else {

    target_range.setValues(source_range);

    var datecell = target_range.offset(0, -1, 1, 1);

    datecell.setValue(new Date()).setNumberFormat('YY-MM-DD HH:mm:ss');

    var clearsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
    clearsheet.getRange("J3:K4").clearContent();
    clearsheet.getRange("B8:B25").clearContent();
    clearsheet.getRange("H8:H9").clearContent();
    clearsheet.getRange("H11").clearContent();
    clearsheet.getRange("O7:P16").clearContent();
  }
}

完美。甚至更好的是,您可能可以自定义.msgBox来引用错误,如果可能的话,还可以自定义错误(说出提交的内容)。

答案 4 :(得分:0)

如您所见,在用户向单元格中输入值后,使用图像作为按钮应单击该按钮并不强制实际输入该值。

强制单元格从“进入模式”更改为“显示模式”的方式是

  • 按下 Enter
  • 按下 Tab
  • 按下键盘快捷键(我尚未对此进行测试)
  • 单击另一个单元格或菜单(包括自定义菜单)

一种解决方法是将

替换为“按钮”
  • 自定义菜单项
  • 侧边栏中的按钮或无模式对话框
  • 简单或可安装的编辑触发器