web-dev-qa-db-ja.com

Googleアプリのスクリプト機能のカスタムキーボードショートカットを作成する方法

私は、Microsoft Excelスプレッドシートの一部をGoogle Doc Spreadsheetsに置き換えることの実現可能性を理解しようとしています。 GoogleドキュメントスプレッドシートでGoogleアプリスクリプト関数へのカスタムキーボードショートカットを作成するにはどうすればよいですか?これは私がVBAとExcelでよく行うことです。

45
User

Appsスクリプトは サーバー側イベント のみを公開します。残念ながら、今日キーボードストロークのようなクライアント側イベントを登録することはできません。 issue tracker で問題を記録してください

19
Arun Nagarajan

ごく最近(2018年4月)Googleは、マクロを起動するキーボードショートカットを割り当てる方法と、既存のスクリプトをマクロとしてインポートする方法を含むマクロレコーダーを開始しました。 Googleスプレッドシートマクロ をご覧ください

注:この機能は現在展開されているため、すべてのユーザーが利用できるようになるまでに数週間かかる場合があります。私の場合、最初は個人のGoogleアカウントで利用可能でしたが、昨日からG Suiteアカウントの1つで利用できました。

10
Rubén

これはスプレッドシートでサポートされるようになりました( https://issuetracker.google.com/issues/3675262 を参照)が、ドキュメントではまだサポートされていません。参照してください https://issuetracker.google.com/issues/3675262 ドキュメントのサポートについて

10
studgeek

ソリューションは issue 306 !に投稿されました。怠け者のために、ここにあります:

HtmlServiceの新しいIFRAMEモードでは、キーコードをアドオンに渡すことができます...

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

そのためには、まずサイドバーをクリック/アクティブ化する必要があります。

5
John Targaryen

更新するだけで、ガイが言及した回避策が可能になりました.IFRAMEを介して、キーボードコマンドを入力するだけのSTUBを作成し、jqueryでそれらを処理し、適切な関数を実行して、これを既に使用できます。

2
Kriggs

素晴らしいニュース:)次の簡単な手順に従って、Googleアプリのスクリプト機能のカスタムキーボードショートカットを実現できます。

  1. GoogleスプレッドシートのUIで、[ツール]> [マクロ]> [マクロの記録]を選択します。
  2. アクションを記録します。たとえば、A1の背景色を変更します。 Saveを押します。
  3. ランダムなタイトルと優先ショートカットを付けて保存します。 後で変更できます
  4. ツール>スクリプトエディターを選択して、Apps Scriptエディターでシートにバインドされたスクリプトを開きます。
  5. 新しいエディタータブで、View> Show Manifest Fileを選択します
  6. TA-ダ! :DfunctionName値を目的の値に変更します;)

マクロ関数は引数を取らず、値を返さないことを忘れないでください。詳細は https://developers.google.com/apps-script/guides/sheets/macros#importing_functions_as_macros

2
urpi5

この問題を回避するには、「トリガーテキスト」専用の列を用意し、実行しようとしているアクションごとに異なるテキストベースのトリガーを定義し、値に基づいてアクションを実行する関数を作成します。トリガーテキスト」。その後、ホットキー機能用のスクリプトエディターの[リソース]の下にあるプロジェクトのトリガーで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();
    }
  }
}
1
MistyDawn

私は同様の問題に苦労しており、まだあまり解決していないので、これを介して前進する方法を見つけることができると思います クラステキストボックスの下のキープレスイベントハンドラ

これが、Arunが指摘したサーバー側の問題を回避するかどうかはわかりませんが、そうすることを期待しています。これを試して時間を浪費する前に、私の推論を修正してください! :)

0
The Guy

簡単に言えば、キープレスイベントハンドラーを使用してキープレスイベントをキャプチャし、必要なホットキーショートカットと比較し、アプリスクリプトでサーバー側の適切なサブルーチンを呼び出して、呼び出されたキーストローク、フォーマット、またはドキュメントの変更。

実行可能性に関する限り、すでに慣れ親しんでいるvbaほど簡単ではありませんが、実際にはそれほど難しくないことを行う別の方法を通り抜けると。

0
The Guy