2016-09-02 4 views
0

私はGoogleスクリプト作成の新機能ですが、ここではさまざまな投稿を使って必要なものをまとめました。特定の列が変更されたとき。私が現在使用しているものは次のとおりです。Googleスプレッドシートの数式ベースのセルの変更は、編集スクリプトでは発生しません。

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    if(s.getName() == "test") { //checks that we're on the correct sheet 
    var r = s.getActiveCell(); 
    if(r.getColumn() == 16) { //checks the column 
     var nextCell = r.offset(0, 1); 
     if(nextCell.getValue() === '') //is empty? 
     nextCell.setValue(new Date()); 
    } 
    } 
} 

これはデータを手動で変更すると完全に機能します。ただし、スクリプトが監視している列が別のシートからデータを取得し、トリガ/スクリプトを起動できません。数式(他のシートを参照するセル)がまだスクリプトを起動するように、これを回避するにはどうすればよいですか?

ご協力いただきまして誠にありがとうございます。ありがとう!

答えて

1

onEdit triggerは、実際のユーザーがスプレッドシートを編集した場合にのみ機能します。あなたのユースケースに依存していますが、Time-driven triggerを使用し、定期的な間隔でそれを設定すると機能を変更する列を監視することができ、ここでの例です:魅力のように働いた

function monitorColumn() { 
    // Add the trigger from the Resources menu in the Script Editor 
    // Script Editor > Resources > Current oroject's triggers > Add trigger 
    // [monitorColumn] - [Time-driven] - [Hour timer] - [Every hour] 

    var s = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = s.getSheetByName("test"); // Get the sheet by name 

    // Get the values of the columns P & Q with getRange(row, column, numRows, numColumns) 
    var columnValues = ss.getRange(1, 16, ss.getLastRow(), 2).getValues(); 

    // Loop through the values 
    for (var i = 0; i < columnValues.length; i++) { 

    // If cell in column P is empty and cell in column Q is not empty set todays date 
    if(columnValues[i][0] != "" && columnValues[i][1] == ""){ 

     // While a range index starts at 1, 1, the JavaScript array will be indexed from [0][0]. 
     ss.getRange(i+1,17).setValue(new Date()); 
    } 
    } 
} 
+0

、ありがとうございました! – Matt

関連する問題