在Google工作表脚本中,我未获得版本中单元格的当前值

时间:2019-02-05 20:48:34

标签: google-apps-script google-sheets

在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

1 个答案:

答案 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函数以创建菜单项。