Microsoft Excel スプレッドシートの一部を Google Doc スプレッドシートに置き換えることの実行可能性を把握しようとしています。Google ドキュメント スプレッドシートで Google アプリ スクリプト関数へのカスタム キーボード ショートカットを作成するにはどうすればよいですか? これは、私が VBA と Excel でよく行うことです。
9 に答える
Apps Script はサーバー側のイベントのみを公開します。残念ながら、現在、キーボード ストロークなどのクライアント側イベントを登録することはできません。問題トラッカーに問題を記録してください
問題 306に解決策が投稿されました。怠惰な人のために、ここにあります:
HtmlService の新しい IFRAME モードでは、キー コードをアドオンに渡すことができます...
$(document).keydown(function(e){
//CTRL + V keydown combo
if(e.ctrlKey && e.keyCode == 86){
$( '#output' ).html("I've been pressed!");
}
})
そのためには、最初にサイドバーをクリック/アクティブ化する必要があります。
これに対する 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();
}
}
}
私は同様の問題に苦しんでいますが、まだあまり解決されていません.Class Textboxの下にあるこのキープレスイベントハンドラーを介して前進する方法を見つけることができると思います.
これがArunが指摘したサーバー側の問題のみを回避するかどうかはわかりませんが、そうなることを願っています. これを試して時間を無駄にする前に、私の推論を自由に修正してください! :)