2017-09-16 15 views
0

休業日に私に送信されたメールに自動的に応答するスクリプトを作成しました。私は最近、特別なフォーマットの電子メールを送信し、そのデータを本体から取り出し、そのデータをGoogleシートに格納し、その値を引き出し、それを休日として使用することで休暇を更新できるようにアップグレードすることに決めました。Google Apps Script数値を変数に解析する問題

私はそれが必要な方法でほとんどすべてを実行していますが、セルから変数に読み込んだ値を渡すと機能しません。しかし、コード内で静的な数値として設定すると、正常に動作します。それは文字列として読み込まれていたので、私はそれを壊して、特に数値にしていたからだと思った。しかし、これも機能しませんでした。だから今私は立ち往生している。どんな助けもありがとう。

output = output + parseInt(test[n])

代わりに数の文字列に結果:あなたはconcatenating文字列+数であるため、それは文字列のように振る舞っています

function autoResponder(){ 
    var content; 
    var myemail = Session.getActiveUser().getEmail(); 

    //Searches your Google Drive for the spreasdsheet that will hold your day off values. 
    var searchDrive = DriveApp.searchFiles('title contains "AutoResponder Data"') 
    if (searchDrive.hasNext()){ 
    var spreadsheet = SpreadsheetApp.open(searchDrive.next()); 
    var sheet = spreadsheet.getSheets()[0]; 
    var data = sheet.getRange("A1"); 

    // Searches for your updater email and retrieves the message. 
    var findlabel = GmailApp.getUserLabelByName('AutoResponderUpdate'); 
    var thread = findlabel.getThreads()[0]; 

    //Checks if an update email was found. 
    if (thread != undefined){ 
     var threadId = thread.getId(); 
     var message = thread.getMessages()[0]; 

     //Copies the data from your email and pastes it into a spreadsheet, then deletes the email entirely. 
     var content = message.getPlainBody(); 
     var writeData = data.setValue(content); 
     Gmail.Users.Threads.remove(myemail, threadId); 
    } else { 
     //Reads data from spreadsheet if no email messages are found. 
     var readData = data.getValue(); 
     var content = readData; 
    } 
    } else { 
    //Creates the spreadsheet that will hold your day off values if one is not found. 
    SpreadsheetApp.create('AutoResponder Data'); 
    autoResponder(); 
    } 
    // Specifies which days you have off. Sun=0 Mon=1 Tue=2 Wed=3 Thurs=4 Fri=5 Sat=6 
    //var daysOff = [content.toString().replace("char(10)", "")]; 
    //var daysOff = [5,6]; 

    var test = content.split(","); 
    var test2 = test.length; 
    var output = ""; 
    if (test2 > -1){ 
    for (var n = 0; n < test2; n++){ 
     if (n === (test2 - 1)){ 
     output = output + parseInt(test[n]); 
     } else { 
     output = output + parseInt(test[n]) + ","; 
     } 
    } 
    } 
    var daysOff = [output]; 
    Logger.log(daysOff); 

    /* There is some code after this to auto reply to the email, 
    but I've left that out. */ 
} 
+0

を探している値が生じるはずです電子メールまたはスプレッドシートから値を取得します。途中で 'message'、' content'、 'readData'、' test'、 'test2'&' output'の値をログに記録すれば、ログはあなたに何を伝えますか?スプレッドシートから値を取得するだけでコードを動作させることができますか? –

+0

@DeanRansevyczしたがって、 'Logger.log(daysOff)'は正しいデータを表示します。たとえば、 'daysOff'を手動で' [5,6] 'に設定すると、ログには[5.0,6.0]と表示されますが、電子メールやスプレッドシートのセルから値 '5,6'を取得すると、 '[5,6]'とログします。これから、数値の代わりに文字列のように動作すると仮定しますが、それを変更する理由や方法はわかりません。うまくいけばそれはそれを明らかにした。 –

+0

あなたの問題をまだ理解していません。休日に自動応答を起動するためのロジックは、電子メールやスプレッドシートからデータを取り込んだときに 'daysOff'の値を解釈しないのでしょうか?ちなみに、なぜ 'output'は配列ではなく文字列ですか?自動返信コードには配列が必要ですか? –

答えて

1

は、ここに私のコードです。

var test = content.split(","); 
var test2 = test.length; 
var output = []; 

test.forEach(function(e) { output.push(parseInt(e)) }); 

var daysOff = output; 
Logger.log(daysOff); 

の上の数字の配列が、あなたはそれが働いていないと言うとき、私はあなたがある場合は、 `Logger.log(daysOff)は`何をログに記録しないことを意味することを集める

+0

それは私が狩りをしていた魔法のようなコーディングラインでした、ありがとう! –

関連する問題