我想知道是否可以强制从脚本中刷新用户输入。
上下文如下:我有一张表,人们应该输入数据,还有一个按钮,当他们完成后点击它们,这将处理数据。
有时人们双击一个单元格,写下他们想要的东西,然后在点击返回之前点击按钮。因此,脚本看到单元格仍为空。
是否有办法强制刷新当前键入的内容,或检测当前正在编辑某个单元格?
干杯,
维克多
答案 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)
如您所见,在用户向单元格中输入值后,使用图像作为按钮应单击该按钮并不强制实际输入该值。
强制单元格从“进入模式”更改为“显示模式”的方式是
一种解决方法是将
替换为“按钮”