2017-04-20 3 views
0

私はArduinoからセンサーデータでGoogleシートを更新するためにTembooを使用しています。私は、データを手動で入力していないので、各データエントリに時間と日付スタンプを追加するためにスクリプトを使用していますが、私はonEdit()トリガを使用することができません。私はまた、幸運なしで(トリガパラメータはRun:onChange、Events:変更時に​​スプレッドシートから)以下のようにonChange()トリガを作成しようとしました。インストール可能なトリガーの有無にかかわらずこれを行う方法はありますか?ユーザーが手動で変更するのではなく、API呼び出しによってセルの値が変更されたときにスクリプトをトリガーするにはどうすればよいですか?

function onChange(e){ 
    var timezone = "GMT+8"; 
    var date_format = "MM/dd/yyyy"; 
    var time_format = "hh:mm:ss"; 

    var updateColName = "sensor"; 

    var DateColName = "date"; 
    var TimeColName = "time"; 

    // update time and date if the sheet is updated via an api call 
    if (e.changeType == "OTHER") { 

     var sheet = event.source.getSheetByName('Sheet1'); //Name of the sheet where you want to run this script. 
     var actRng = event.source.getActiveRange(); 
     var editColumn = actRng.getColumn(); 
     var index = actRng.getRowIndex(); 
     var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 

     var dateCol = headers[0].indexOf(DateColName); 
     var timeCol = headers[0].indexOf(TimeColName); 

     var updateCol = headers[0].indexOf(updateColName); 
     updateCol = updateCol + 1; 

     if (dateCol > -1 && timeCol > -1 && index > 1 && editColumn == updateCol) { 
     // only timestamp if 'Last Updated' header exists, but not in the header row itself! 

     var cellDate = sheet.getRange(index, dateCol + 1); 
     var cellTime = sheet.getRange(index, timeCol + 1); 

     var date = Utilities.formatDate(new Date(), timezone, date_format); 
     var time = Utilities.formatDate(new Date(), timezone, time_format); 

     cellDate.setValue(date); 
     cellTime.setValue(time); 
    } 

    } 
}; 

ありがとうございます!

+0

時間、日付をaudrino自体でコーディングして挿入することを考えましたか? –

+0

私は時間ライブラリを使用しようとしましたが、スケッチの実行が開始されてから経過時間ではなく、実際の時間(つまり、コンピュータの時刻と同期する)に問題がありました。それがより簡単になると思うなら、私はもう一度それを試してみることができます! – Cassandra

答えて

0

this answerに基づいて、セルが変更されてもユーザーによって変更されない場合、onEdit()をトリガーする直接的な解決策はないようです。 hereと記載された時間トリガースクリプトを使用して回避策を実装しました。

0

私はずっと前から同様の問題がありました。私はすべてを試してみましたが、私はあなたが上記のコードを挿入し、トリガーをインストールするには、一度のonChange関数を実行した後にスクリプトを保存する必要が

function onChange(e) { 
var ss = SpreadsheetApp.getActive(); 
ScriptApp.newTrigger('name of the function you need to trigger') 
.forSpreadsheet(ss) 
.onChange() 
.create(); 
} 

ONCHANGEインストール引き金になってしまった 。開いている "現在のプロジェクトのトリガー"によってインストールされているかどうかを確認できます このヘルプが必要です!

関連する問題