2012-05-07 61 views
0

我有一个带有数据表的googledocs电子表格。表格填写完毕后,我的脚本将获取数据并通过电子邮件发送。我拥有的代码将从数据范围中获取我想要的每个值,并将其放入一个表中,但这一切都是通过识别超过一百个变量来完成的。Google脚本:使用电子表格数据在电子邮件中填充html表格

有没有办法使用某种数组,以便使用数据范围中的每行数据填充html表?

我自由地承认是一个编程新手,这可能是一些最糟糕的意大利面代码。任何帮助非常感谢(即使它是JavaScript的入门)。

function Gradereport() { 

//这个脚本电子邮件的形式,内容到某一接受

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 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上找到它。

相关问题