如何为谷歌应用脚​​本功能创建自定义键盘快捷键?

时间:2012-12-05 20:13:52

标签: google-apps-script google-sheets keyboard-shortcuts

我试图了解用Google Doc Spreadsheets替换我的一些Microsoft Excel电子表格的可行性。如何在Google文档电子表格中创建谷歌应用脚​​本功能的自定义键盘快捷键?这是我通常用VBA和Excel做的事情。

9 个答案:

答案 0 :(得分:19)

Apps脚本仅公开server side events。不幸的是,您今天无法注册键盘笔划等客户端事件。请在我们的issue tracker

中记录一个问题

答案 1 :(得分:10)

现在支持Sheets(请参阅https://issuetracker.google.com/issues/36752620),但尚未在文档中支持。有关Google文档支持的信息,请参阅并https://issuetracker.google.com/issues/36752620加注星标

答案 2 :(得分:10)

最近(2018年4月)Google推出了一款宏录制器,其中包括一种分配键盘快捷方式来触发宏的方法,以及一种将现有脚本导入为宏的方法。见Google Sheets Macros

注意:此功能目前正在推出,因此可能需要几周的时间才能供所有人使用。在我的情况下,它首先在我的个人Google帐户上提供,从昨天开始,它可以通过我的一个G Suite帐户使用。

答案 3 :(得分:5)

已在issue 306张贴了解决方案!对于懒惰,这里是:

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

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

必须先点击/激活侧边栏才能实现。

答案 4 :(得分:2)

只是更新,现在可能是The Guy提到的解决方法,通过IFRAME,你可以创建一个侧边栏,一个STUB只需输入键盘命令,用jquery处理它们,并运行适当的功能,已经使用它了。

答案 5 :(得分:2)

好消息:)您可以按照以下简单的步骤为Google应用程序脚本功能实现自定义键盘快捷键:

  1. 在Google表格用户界面中,选择工具>宏>记录宏
  2. 记录所有操作。例如,更改A1中的彩色背景。按保存
  3. 使用随机标题和首选快捷方式保存它。 您可以稍后更改
  4. 选择工具>脚本编辑器,以在Apps脚本编辑器中打开绑定到工作表的脚本。
  5. 在新的编辑器标签中,选择查看>显示清单文件
  6. TA-DÁ! :D将 functionName 值更改为所需的值;)

记住宏函数应该不带参数,也不返回值。有关更多信息,请访问https://developers.google.com/apps-script/guides/sheets/macros#importing_functions_as_macros

答案 6 :(得分:1)

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

这种方法的最大缺点是onEdit触发器需要(至少对我来说)约7整秒才能捕获更改并执行更新。如果您需要更快速地处理某些内容,则可能需要寻找替代方法。

我在下面提供了一个示例,说明如何根据指定的“触发器”列中的触发器文本更改行颜色。您可以使用它来执行可以通过脚本执行的任何操作,例如更改值,设置字体粗细,复制数据,甚至在检查触发器文本输入后运行其他函数。

/*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();
    }
  }
}

答案 7 :(得分:0)

我正在努力解决类似的问题而且我没有得到太多解决但我认为通过这个问题可以找到前进的方法keypress event handler under Class Textbox

我不知道这是否解决了服务器方面的问题,只有Arun指出,但我确信希望如此。在浪费太多时间尝试这个之前,请随意纠正我的推理! :)

答案 8 :(得分:0)

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

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