2016-06-20 5 views
1

私は以前にtwo-part questionと尋ねましたが、一方の部分のみが応答されて閉じられ、他方の部分は未応答のままでした。私はその部分に再び頼んでいます。ボタンをクリックしたときにスプレッドシート機能が実行されない

私はチームのための "自動"プロジェクト追跡シートを作成しています。誰かがボタンを押すという意味で自動で、日付/タイムスタンプを記録し、そのプロジェクトに費やした時間が自動的に計算されます。

しかし、Google Drawingにスクリプトを接続してボタンとして機能させると、何も起こりません。理由を把握することができません。ここで

は私のスプレッドシートがクリックされたときtimeStamp()機能を実行するように設定ボタン(図面)で、次のようになります。

screenshot

あなたはまた、スプレッドシートhereのコピーを取得することができます。

私がこれまで持っているコード:

function timeStamp() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 

    var timezone = ss.getSpreadsheetTimeZone; 
    var timeFormat = "hh:mm a"; 

    var lastCol = sheet.getLastColumn(); 
    var lastRow = sheet.getLastRow(); 
    var lastCell = sheet.getRange(lastRow, lastCol); 
    var timeStampCell = sheet.getRange(lastRow, lastCol + 1); 


    if(timeStampCell === " ") { 
    var date = Utilities.formatDate(new Date(), timezone, timeFormat); 
    timeStampCell.setValue(date); 
    }; 
} 

答えて

0
var timeStampCell = sheet.getRange(lastRow, lastCol + 1); 

は... RangeオブジェクトにtimeStampCellを設定します。

if(timeStampCell === " ") { 

... Rangeオブジェクトを、単一のスペース文字を含むStringと比較します。タイプが異なるため、比較は常にfalseです。許容される型強制による比較のために==が使用された場合、オペランドはまったく異なるため、falseと評価されます。

おそらく、セルの内容を求めており、空の文字列にそれらを比較する:

if(timeStampCell.getValue() === "") 

注:スプレッドシートのセルの内容を===を使用して世話をします。比較がDateオブジェクトの場合、===は、両方のオペランドが全く同じオブジェクトの場合にのみtrueと評価されます。 Which equals operator (== vs ===) should be used in JavaScript comparisons?

この例では、スプレッドシートからどのデータ型がブランクであるかを気にする必要はありません。したがって、==を使用することができます。ここ

if(timeStampCell.getValue() == "") 

もう一つの問題は、:

var timezone = ss.getSpreadsheetTimeZone; 

これは、スプレッドシート "getSpreadsheetTimeZone" メソッドへの参照を取得しますが、それはあなたのタイムゾーンを教えてくれませます。メソッドの結果を取得するには、括弧を含めることによって、それを呼び出す必要があります。これら二つの変更により

var timezone = ss.getSpreadsheetTimeZone(); 

、スクリプトは私のために動作します。

+0

ありがとうございました!私が気付かなかったいくつかのこと。ついにボタンが何かをする!私が望むところにデータを置くことはないと思われますが、私は最終的にそれを稼働させる方法を知っていると思います。 – SanctifiedVengenace

関連する問題