0

次のことを行う Google Apps Script を作成したいと考えています: スプレッドシート (売上を記録するスプレッドシートなど) で人の名前を含むセルを選択し、メニュー ボタンを使用して関数を呼び出すと、スクリプトは、完全な消費者データを保存し、契約または支払い領収書を生成するためにその消費者から必要なすべての情報を含む別のスプレッドシートで、個人の名前 (または彼のドキュメントの番号) を使用して検索 (クエリ) を実行します。Google Apps Script を使用して、あるスプレッドシートの情報を別のスプレッドシートで検索するための最良の戦略は何ですか? これに似た実装のスクリプト サンプルはありますか? ヘルプ/ガイダンスを事前にありがとうございます!

4

1 に答える 1

2

セルの選択によってトリガーされるイベントはありません。メニュー項目またはボタンを使用して関数を呼び出すか、ユースケースで許容される場合は、セルを編集してonEditイベントをトリガーする必要があります。

「検索部分」は実際には非常に単純で、スプレッドシート自体または別のスプレッドシートにあるデータは重要ではなく、データへのアクセス方法を変更するだけです ( getActiveSpreadsheetまたはopenById() )。そこからすべての値を取得し、結果の 2D 配列で検索を実行します。


コメントに続いて編集してください。見つかったセルの範囲を返すコードの例を次に示します ( A1 表記を取得し getValue() ますが、もちろん可能です)

function test(){ // to test the find function with an argument, 'any' in this case 
  var result = findItem('any');
  if(result){Logger.log(result.getA1Notation())}else{Logger.log('no luck !')};
}

function findItem(item){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = ss.getDataRange().getValues()
  for(var n = 0;n<data.length;++n){
    if(data[n].indexOf(item)>-1){ // this is a "strict" find, ie the value must be the entire search item. If you want to do partial match you should compare differently...
      return (ss.getRange(n+1,data[n].indexOf(item)+1)); // if found return the range. note the +1 because sheets have 1 index while arrays have 0 index
    }
  }
  return false;// if we come to the end of sheet without result...
}
于 2013-11-01T13:29:47.033 に答える