2016-12-09 17 views
0

Google ScriptとJavascriptの新機能です。しかし、私はスプレッドシートから取り出されたファイル名のリストを電子メールで送信しようとしています。名前は私のシートの列にあり、 "newfiles"という変数を作成して、必要な値だけを取り出します。ここまでは順調ですね。google script - メールに挿入する値のリストを作成する

function sendUpdate() 
 
{ 
 
    
 
    //set up variables 
 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("finishedfiles"); 
 
    var range = sheet.getDataRange().getValues(); 
 
    
 
    for (n = 0; n < range.length; n++) 
 
     { 
 
     var newfiles = range[n][1]; 
 
     }

問題は、スクリプトが範囲内の各値に対して電子メールを送信することです。

var startRow = 2; 
 
    
 
for (var i = 0; i < range.length; i++) 
 
if (startRow + i , 5 != '') 
 
     { 
 
     MailApp.sendEmail 
 
     {to: "[email protected]", 
 
     subject: "list of files", 
 
     htmlBody: "Here's your list:<br>" + newfiles + 
 
     "<br>This message was sent automatically."}); 
 
     }

私は唯一の電子メールを送信したいと思いますので、私は私のメッセージに挿入することができ、1つのテキスト文字列に私の変数の値を結合する必要があります。

私はこれがn00bの質問であると感じますが、私の人生にとってはそれを理解できません。

答えて

1

大きなメールが1つ必要な場合は、範囲内のすべてのファイル名に対してMailAppを呼び出さないでください。

function sendUpdate() { 
    var sheet = SpreadsheetApp 
     .getActiveSpreadsheet() 
     .getSheetByName("finishedfiles"); 

    var range = sheet.getDataRange().getValues(); 

    var filenames = range 
    .map(function(row) {return row[1];}) // Extract the filenames column 
    .join("<br>");      // Combine them all into a string 

    MailApp.sendEmail(
    {to: "[email protected]", 
    subject: "list of files", 
    htmlBody: "Here's your list:<br>" + filenames + 
    "<br>This message was sent automatically."}); 
} 

if (startRow + i , 5 != '')は何をしますか?常にtrueと評価されていませんか?

+0

nice 'map'メソッドの使い方! –

+0

ありがとうマックス、関数型プログラミング技術を採用すると、GASコーディングがずっと簡単になります。 –

+0

"if"機能は、一度に2つのことをやり遂げようとしていたときから残されています。リストを郵送し、最後の列を「完了」にして、重複した電子メールを誤って送信しないようにします。私はそれが最初の値を得て、電子メールを送り、列に印をつけてから、すべての値に対して繰り返すので、私は今、複数の電子メールを取得しているのが分かります。 あなたのソリューションはすばらしかったので、私は2つを分けました。今すぐ 1a。列を選び、リストを作成する 1b。リストをメールします 私はまだループスルーして特定のセルだけをマークするのに問題があります。ループ上のヒント? – Kar3n

関連する問題