如何创build谷歌应用脚​​本function的自定义键盘快捷键?

我试图了解用Google Doc Spreadsheetsreplace部分Microsoft Excel电子表格的可行性。 我怎样才能创build一个谷歌应用程序脚本函数在谷歌文档电子表格的自定义键盘快捷方式? 这是我通常用VBA和Excel做的事情。

Apps脚本只公开服务器端事件 。 不幸的是,你今天不能注册像键盘笔画这样的客户端事件。 请在我们的问题跟踪器中logging问题

正如@Arun所说,这还不支持。 查看并明确此问题 。

问题306已经发布了一个解决scheme! 对于懒惰,这里是:

HtmlService中的新IFRAME模式确实允许将密钥代码传递给附加组件…

$(document).keydown(function(e){ //CTRL + V keydown combo if(e.ctrlKey && e.keyCode == 86){ $( '#output' ).html("I've been pressed!"); } }) 

必须先点击/激活边栏才能发生。

只是更新,现在可能的解决scheme,盖伊提到,通过IFRAME,你可以创build一个边栏,一个STUB只是为了进入键盘命令,对待他们与jQuery,并运行适当的function,已经使用了这一点。

一个可能的解决方法是为“触发器文本”专门设置一个列,为每个要执行的操作定义不同的基于文本的触发器,然后创build一个函数来检查值并执行基于“触发文字“。 然后,您可以在脚本编辑器的“资源”下的项目触发器中为热键function设置一个onEdit事件触发器。

这种方法最大的缺点是,onEdit触发器需要(至less对我来说)大约7秒的时间来捕获更改并执行更新。 如果你需要更快的处理,你可能需要寻找一种替代方法。

我已经提供了一个例子来说明如何在指定的“触发器”列中根据触发器文本更改行颜色。 您可以使用它来完成任何可以通过脚本完成的工作,例如更改值,设置字体重量,复制数据,甚至在检查触发器文本input后运行其他function。

 /*you will need to add an onEdit trigger to your project for this to run when you edit the cell*/ //function to update row color using entered text in a specified "trigger" column function hotKey(){ //get the cell you edited and the associated column and row number var cell = sheet.getActiveCell(); var thisCol = cell.getColumn(); var thisRow = cell.getRow(); //set a range variable for the entire row var colorRow = sheet.getRange(thisRow,thisCol,1,Cols); //get the edited value for the cell as a string var val = cell.getValue().toString(); //check that the edited cell is in the trigger column if (thisCol = 1){ //update the row color based on the entered value if(val == "g"){ colorRow.setBackground("#00ff00"); //sets row color to green cell.clearContent(); //delete the trigger cell value }else if(val == "r"){ colorRow.setBackground("#ff0000"); cell.clearContent(); }else if(val == "fd"){ colorRow.setBackground("#fff2cc"); cell.clearContent(); }else if(val == "pr"){ colorRow.setBackground("#ffff00"); cell.clearContent(); }else if(val == "cn"){ colorRow.setBackground("#6fa8dc"); cell.clearContent(); } } } 

我挣扎着一个类似的问题,我没有得到太多的解决,但我认为可以通过这个按键事件处理程序类文本框

我不知道这是否能解决Arun指出的服务器端问题,但我确实希望如此。 请在我浪费太多时间尝试之前,随时纠正我的推理! 🙂

长话短说:写一个HTML服务,它使用按键事件处理程序来捕获按键事件,并将它们与所需的热键快捷键进行比较,然后在应用程序脚本中调用服务器端的相应子例程以内联被调用的按键,格式或文件更改。

就可行性而言,并不像你已经熟悉的vba那样容易,但是一旦你通过了不同的做事方式,并不那么困难。