回答

19

Apps腳本僅公開server side events。不幸的是,你今天不能註冊像鍵盤筆畫這樣的客戶端事件。請在我們的登錄問題issue tracker

+1

問題跟蹤器最接近的問題似乎是[問題306](https://code.google.com/p/google-apps-script-issues/issues/detail?id = 306)這可以做一些更多的星星/ upvotes,但是應用程序團隊對此有一種震耳欲聾的沉默:( –

+0

有人在[issue 306 post 33](https://code.google。)上添加了一個工作解決方案。 com/p/google-apps-script-issues/issues/detail?id = 306#c33)! –

9

正如@Arun所說,這還不支持。請參閱並明星issue

+1

你的答案到底是什麼? – CodyBugstein

+0

@Imray這不難搞清楚; – nawfal

+1

@nawfal它可能有已發表評論 – CodyBugstein

0

我有一個類似的問題,儘管我沒有得到多少解決但我想前進的方向可以通過這個keypress event handler under Class Textbox

發現我不知道,如果這都繞服務器的問題所困擾只有阿倫指出,但我確信希望如此。在我浪費太多時間嘗試之前,請隨時糾正我的推理! :)

+0

此方法是UiApp服務的一部分,它不提供從文檔或電子表格UI中調用函數的解決方案。在UiApp或html服務中,您當然可以使用按鍵來觸發事件 –

+0

好的。那麼有沒有什麼可以讓UiApp或html服務(我認爲可以成爲擴展的一部分)調用在Google Docs中編寫的Apps腳本中的宏,然後可以執行鍵盤快捷方式直接完成的必需步驟? –

+0

確實沒什麼...可以使用這種模式與側邊欄...邊欄中的用戶界面將具有可以調用腳本功能的按鈕。一些新的附加組件以非常優雅的方式使用該配置。 –

0

長話短說:寫一個html服務,它使用按鍵事件處理程序捕獲按鍵事件,並將它們與所需的熱鍵快捷鍵進行比較,然後在應用程序腳本中調用服務器端的相應子例程以內聯要求按鍵,格式或文檔更改。

就可行性而言,並不像你已經熟悉的vba那麼簡單,但是一旦你通過了不同的做事方式,並不那麼困難。

+0

我不認爲我明白你在說什麼。你有鏈接到一篇文章或一些文檔,或者你能展示一個例子嗎? – User

+1

對不起,沒有。我只是在爲朋友研究類似問題的同時閱讀相關文件。 不幸的是,我必須承認,我現在的答案似乎是錯誤的。我無法得到此確認,但離我最近的人可以告訴我們處理Docs文本輸入面板的功能被阻止。我可以編寫一個html服務側邊欄,但我無法獲取必要的對象,以便爲主文檔面板創建按鍵事件處理程序。我猜測他們可能是在試圖阻止某人編寫鍵盤記錄或其他東西。 –

2

只是更新,現在可能的解決方案,蓋伊提到,通過IFRAME,你可以創建一個側欄,一個STUB只是爲了進入鍵盤命令,用jquery處理它們,並運行適當的功能, 。

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!"); 
    } 
}) 

必須點擊/第一激活側邊欄爲了發生。

+2

完整的代碼來實現它可以在這裏找到(https://stackoverflow.com/a/44345522/3154274) – Enora

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