for循环的第二次运行出错 - TypeError:无法在对象中找到函数getrange

时间:2016-03-11 03:19:04

标签: google-apps-script

此脚本针对包含3个样本行的样本表运行。它在第一个循环中正确运行。然后,在第二个循环中,它抛出

  

无法在对象中找到函数getrange

在这一行

value1.copyTo(pdf.getRange("B"+8+":B"+8), {contentsOnly:true});

代码:

function MassEmail() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    //var range = ss.getActiveRange();
    var inputs = ss.getSheets()[0];
    var temp = ss.getSheets()[1]; 
    var team = ss.getSheets()[2];
    var fees = ss.getSheets()[3];
    var display = ss.getSheets()[4];
    var pdf = ss.getSheets()[5];

    //CHANGE temp to inputs IF YOU NEED TO SEND EMAIL CONTRACT TO ALL CONTACTS
    var row = inputs.getLastRow();
    var dataRange = inputs.getRange(2, 2, row, 5); // Fetch values for each row in the Range
    var data = dataRange.getValues(); 

    for (i=0; i < data.length; i++) { 
    var school = data[i];
    if (school[1] != "" && school[2] != "OK") {
    // Browser.msgBox(data[i]);

    var process1 = temp.getRange(2,1,1,5)
    process1.setValues([school]);
    var process2 = temp.getRange("A"+2+":D"+4);
    process2.copyTo(temp.getRange("A"+2+":D"+4), {contentsOnly:true});

    var value1 = display.getRange("B"+8+":B"+8);
    value1.copyTo(pdf.getRange("B"+8+":B"+8), {contentsOnly:true});
    var value2 = display.getRange("B"+9+":B"+9);
    value2.copyTo(pdf.getRange("B"+9+":B"+9), {contentsOnly:true}); 
    var value3 = display.getRange("B"+22);
    value3.copyTo(pdf.getRange("B"+22), {contentsOnly:true});
    var value4 = display.getRange("B"+24);
    value4.copyTo(pdf.getRange("B"+24), {contentsOnly:true});
    var value5 = display.getRange("B"+31);
    value5.copyTo(pdf.getRange("B"+31), {contentsOnly:true});
    //var range = pdf.getRange("B"+31);
    //range.setValue(Utilities.formatDate(new Date(), "GMT-5", "MM-dd-yyyy HH:mm"));
    var value6 = display.getRange("B"+34);
    value6.copyTo(pdf.getRange("B"+34), {contentsOnly:true});

    // Create a new Spreadsheet and copy the current sheet into it.
    var newSpreadsheet = SpreadsheetApp.create(" snapshot");
    sheet = pdf;
    pdf.copyTo(newSpreadsheet); 

    // Find and delete the default "Sheet 1", after the copy to avoid triggering an apocalypse
    newSpreadsheet.getSheetByName('Sheet1').activate();
    newSpreadsheet.deleteActiveSheet();

    // Make PDF
    var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();
    var attach = {fileName:'2016 file.pdf', content:pdf, mimeType:'application/pdf'};

    var emailSubject = "subject"
    var emailYourName = "person 
    var emailReply = "email@cox.net"

    var emailMsg = ""


    SpreadsheetApp.flush();
    MailApp.sendEmail(school[1], emailSubject, emailMsg,{htmlbody: emailMsg, name: emailYourName, replyTo: emailReply, bcc:"person@gmail.com", attachments:[attach]});

    // Delete the wasted sheet we created, so our Drive stays tidy.
    DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true); 

    inputs.getRange(i+2,6).setValue("OK"); 
    //temp.getRange(i+2,5).setValue("OK");

    // clear row 2 in temp sheet
    temp.getRange(2, 1, 2, 5).clear({contentsOnly:true});

    SpreadsheetApp.flush();
}}}

1 个答案:

答案 0 :(得分:0)

代码为两种不同的数据类型声明变量pdf两次。

var pdf = ss.getSheets()[5];

并且

// Make PDF
var pdf = DriveApp.getFileById(newSpreadsheet.getId())
            .getAs('application/pdf').getBytes();

重命名其中一个。也许将pdf更改为pdf_File

var pdf_File = DriveApp.getFileById(newSpreadsheet.getId())
            .getAs('application/pdf').getBytes();