2012-05-07 15 views
0

私はデータテーブルを備えたグーグルドックスプレッドシートを持っています。フォームが記入された後、私のスクリプトはデータを取り込んで電子メールで送信します。私は、データ範囲からそれぞれの値を取り出してテーブルに入れるコードを持っていますが、100以上の変数を識別することですべてのことができます。Googleスクリプト:スプレッドシートデータを使用して電子メールでhtmlテーブルを作成する

htmlテーブルにデータ範囲の各データ行が設定されるように配列を使用する方法はありますか?

私はプログラミングの初心者であることを自認しています。これはおそらくそこの最悪のスパゲッティコードの一部です。どのような助けも大いに感謝されます(たとえそれがジャバスクリプトの下塗りであっても)。私はへのループと一緒に、あなたのコードにいくつかの変更を加えること自由にかかってきた特定の受信者

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Report"); 
var recloc = sheet.getRange("D2"); //cell location of student email 
var recipient = recloc.getValue(); //student's email address 
var lastloc = sheet.getRange("B2"); 
var last = lastloc.getValue(); 
var firstloc = sheet.getRange("A2"); 
var first = firstloc.getValue(); 
var courseloc = sheet.getRange("E2"); 
var course = courseloc.getValue(); 
var dateloc = sheet.getRange("C2"); 
var date = dateloc.getValue(); 
var gradeloc = sheet.getRange("D5"); 
var grade = gradeloc.getValue(); 
var totloc = sheet.getRange("D4"); 
var total = totloc.getValue(); 
var perloc = sheet.getRange("D6"); 
var percent = perloc.getValue(); 
var dataRange = sheet.getRange("A4:B9"); 
var data = dataRange.getValues(); 
// assignment cell locations 
var assignloc1 = sheet.getRange("A5"); 
var assignloc2 = sheet.getRange("A6"); 
var assignloc3 = sheet.getRange("A7"); 
var assignloc4 = sheet.getRange("A8"); 
var assignloc5 = sheet.getRange("A9"); 
// assignment values 
var assign1 = assignloc1.getValue(); 
var assign2 = assignloc2.getValue(); 
var assign3 = assignloc3.getValue(); 
var assign4 = assignloc4.getValue(); 
var assign5 = assignloc5.getValue(); 
// assignment score locations 
var scoreloc1 = sheet.getRange("B5"); 
var scoreloc2 = sheet.getRange("B6"); 
var scoreloc3 = sheet.getRange("B7"); 
var scoreloc4 = sheet.getRange("B8"); 
var scoreloc5 = sheet.getRange("B9"); 
// assignment score values 
var score1 = scoreloc1.getValue(); 
var score2 = scoreloc2.getValue(); 
var score3 = scoreloc3.getValue(); 
var score4 = scoreloc4.getValue(); 
var score5 = scoreloc5.getValue(); 

    // error message 
var errmess = first+' '+last+', your Pin code did not match. Please double check your entry and re-submit. Contact your professor if you get this message again.'; 
var subject = course+' Grade Report'; 
var body = first+' '+last+', here is your grade report, requested on '+date+'. Grade '+grade+'/'+total+', '+percent+'%. Score breakdown: '+data; 
var bodyHTML1 = '<p>'+first+' '+last+', here is your grade report.<br> Grade '+grade+'/'+total+', '+percent+'%.</p>'; 
// var bodyHTML2 = '<p>'+data+'</p>'; 
var bodyHTML2 = '<table> <tr> <td> '+assign1+' </td> <td> '+score1+' </td> </tr> <tr> <td> '+assign2+' </td> <td> '+score2+' </td> </tr> <tr> <td> '+assign3+' </td> <td> '+score3+' </td> </tr> <tr> <td> '+assign4+' </td> <td> '+score4+' </td> </tr> <tr> <td> '+assign5+' </td> <td> '+score5+' </td> </tr> </table>'; 

var bodyHTML3 = '<p>Sent by the <a href="http://www.steegle.com/">Steegle.com</a> Contact Us Form Google Apps Script</p>'; 
var advancedArgs = {htmlBody:bodyHTML1+bodyHTML2 ,}; 
var pinloc = sheet.getRange("G2"); 
var pin = pinloc.getValue(); 

if(pin == 1){  
MailApp.sendEmail(recipient, subject, body, advancedArgs); 
}else{ 
MailApp.sendEmail(recipient, subject, errmess); 
} 
} 

答えて

2

function Gradereport() { 

//このスクリプトの電子メールフォームの内容テーブルを生成し、ここにある:あなたがしようとしているよう

function report2() { 
    var LOC = { 
    recipient: [1,3],//D2 
    first: [1,0], //A2 
    last: [1,1],  //B2 
    course: [1,4], //E2 
    date: [1,2],  //C2 
    grade: [4,3], //D5 
    total: [3,3], //D4 
    percent: [5,3], //D6 
    }; 

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Report"); 
    var values = sheet.getDataRange().getValues(); //get all values on the spreadsheet at once 
    var data = {}; 
    for(var i in LOC) //row  //column (all zero-based index) 
    data[i] = values[ LOC[i][0] ][ LOC[i][1] ]; 

    var errmess = data.first+' '+data.last+', your Pin code did not match. Please double check your entry and re-submit. Contact your professor if you get this message again.'; 
    var subject = data.course+' Grade Report'; 
    var body = data.first+' '+data.last+', here is your grade report, requested on '+data.date+'. Grade '+data.grade+'/'+data.total+', '+data.percent+'%. Score breakdown: '+data.data; 
    var bodyHTML1 = '<p>'+data.first+' '+data.last+', here is your grade report.<br> Grade '+data.grade+'/'+data.total+', '+data.percent+'%.</p>'; 

    var bodyHTML2 = '<table>'; 
    for(var i = 4; i < 9; ++i) 
    bodyHTML2 += '<tr><td> '+values[i][0]+' </td><td> '+values[i][1]+' </td></tr>'; 
    bodyHTML2 += '</table>'; 

    var advancedArgs = {htmlBody: bodyHTML1+bodyHTML2}; 
    var pin = values[1][6]; //G2 
    if(pin == 1) 
    MailApp.sendEmail(recipient, subject, body, advancedArgs); 
    else 
    MailApp.sendEmail(recipient, subject, errmess); 
} 

私は、スプレッドシートのデータに基づいて電子メールを送信するスクリプトを開発しました。私はそれが役に立つと思うかもしれないと思います。これはFormEmailerと呼ばれています。スクリプトギャラリー(メニューの[挿入]> [スクリプト])およびそのsiteにあります。