私は、Microsoft Excelスプレッドシートの一部をGoogle Doc Spreadsheetsに置き換えることの実現可能性を理解しようとしています。 GoogleドキュメントスプレッドシートでGoogleアプリスクリプト関数へのカスタムキーボードショートカットを作成するにはどうすればよいですか?これは私がVBAとExcelでよく行うことです。
Appsスクリプトは サーバー側イベント のみを公開します。残念ながら、今日キーボードストロークのようなクライアント側イベントを登録することはできません。 issue tracker で問題を記録してください
ごく最近(2018年4月)Googleは、マクロを起動するキーボードショートカットを割り当てる方法と、既存のスクリプトをマクロとしてインポートする方法を含むマクロレコーダーを開始しました。 Googleスプレッドシートマクロ をご覧ください
注:この機能は現在展開されているため、すべてのユーザーが利用できるようになるまでに数週間かかる場合があります。私の場合、最初は個人のGoogleアカウントで利用可能でしたが、昨日からG Suiteアカウントの1つで利用できました。
これはスプレッドシートでサポートされるようになりました( https://issuetracker.google.com/issues/3675262 を参照)が、ドキュメントではまだサポートされていません。参照してください https://issuetracker.google.com/issues/3675262 ドキュメントのサポートについて
ソリューションは issue 306 !に投稿されました。怠け者のために、ここにあります:
HtmlServiceの新しいIFRAMEモードでは、キーコードをアドオンに渡すことができます...
$(document).keydown(function(e){
//CTRL + V keydown combo
if(e.ctrlKey && e.keyCode == 86){
$( '#output' ).html("I've been pressed!");
}
})
そのためには、まずサイドバーをクリック/アクティブ化する必要があります。
更新するだけで、ガイが言及した回避策が可能になりました.IFRAMEを介して、キーボードコマンドを入力するだけのSTUBを作成し、jqueryでそれらを処理し、適切な関数を実行して、これを既に使用できます。
素晴らしいニュース:)次の簡単な手順に従って、Googleアプリのスクリプト機能のカスタムキーボードショートカットを実現できます。
マクロ関数は引数を取らず、値を返さないことを忘れないでください。詳細は https://developers.google.com/apps-script/guides/sheets/macros#importing_functions_as_macros
この問題を回避するには、「トリガーテキスト」専用の列を用意し、実行しようとしているアクションごとに異なるテキストベースのトリガーを定義し、値に基づいてアクションを実行する関数を作成します。トリガーテキスト」。その後、ホットキー機能用のスクリプトエディターの[リソース]の下にあるプロジェクトのトリガーで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();
}
}
}
私は同様の問題に苦労しており、まだあまり解決していないので、これを介して前進する方法を見つけることができると思います クラステキストボックスの下のキープレスイベントハンドラ
これが、Arunが指摘したサーバー側の問題を回避するかどうかはわかりませんが、そうすることを期待しています。これを試して時間を浪費する前に、私の推論を修正してください! :)
簡単に言えば、キープレスイベントハンドラーを使用してキープレスイベントをキャプチャし、必要なホットキーショートカットと比較し、アプリスクリプトでサーバー側の適切なサブルーチンを呼び出して、呼び出されたキーストローク、フォーマット、またはドキュメントの変更。
実行可能性に関する限り、すでに慣れ親しんでいるvbaほど簡単ではありませんが、実際にはそれほど難しくないことを行う別の方法を通り抜けると。