在Google工作表脚本中,我要填充几个单元格。完成后,用户将单击将调用一个函数的按钮。
问题在于,如果用户仍将焦点放在LAST单元格上,则会被忽略。使用HAVE TO单击另一个单元格进行“保存”是最后一次修改。
示例: 在单元格K10中写一些文本,然后单击将调用btn_save的按钮
function btn_save (){
var spreadsheet = SpreadsheetApp.getActive();
if (spreadsheet.getRange('K10').getValue() == ''){
Browser.msgBox('Empty :( ');
}
else{
Browser.msgBox('Yeah you got it !');
}
}
=>您将没有文本! 如果在单元格K10中写了一些文本之后,您在单击btn_save之前单击了另一个单元格,则将获得数据...
这对我来说确实是一个问题,因为使用该用户会忘记在单击该按钮之前先单击其他位置,而我们会遇到一个问题(数据丢失)。
在其他工具中,您无需单击其他位置即可保存数据。就像当您编写和发送电子邮件时一样,当您单击“发送”时,您的电子邮件将与所有数据一起发送,如果焦点仍在正文,主题,...上,则为该事件。
我真的希望有这样一个函数:SaveCurrentCell,Simulate EnterKEY或其他任何方法:)
感谢您的帮助。
最好的问候,
Adrien
答案 0 :(得分:1)
一个可能的替代解决方案是使用custom menu运行保存功能。这迫使用户单击菜单项,这总是使程序接受对单元格所做的更改。
如果我正确理解,您当前正在使用clickable image来运行函数。除非按Enter,否则这不会更新对当前单元格的更改。
您可以像这样创建菜单项:
//onOpen will run each time the spreadsheet is opened
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("Save Files")
.addItem("save", "btn_save") //Binds the function btn_save to save menu item
.addToUi();
}
function btn_save (){
var spreadsheet = SpreadsheetApp.getActive();
SpreadsheetApp.flush() //apply all pending changes!
if (spreadsheet.getRange('K10').getValue() == ''){
Browser.msgBox('Empty :( ');
}
else{
Browser.msgBox('Yeah you got it !');
}
}
最后,onOpen是一个simple trigger,它将在每次打开电子表格时创建您的菜单项。因此,一旦将此代码复制到电子表格,请确保您重新加载电子表格或运行onOpen函数以创建菜单项。