2014-09-24 39 views
0

我試圖以編程方式添加每行的狀態。我有一份客戶名單,我想用Google Script發送一些電子郵件。Google腳本標記行一次一個

我的問題是爲什麼它沒有達到最後一行?

我的代碼看起來像:

function sendEmails() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var dataSheet = ss.getSheetByName(SHEET_NAME); 

    var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows() - 1, 4); 

    var templateSheet = ss.getSheetByName(TEMPLATE_SHEET_NAME); 
    var emailSubject = templateSheet.getRange(EMAIL_SUBJECT_CELL_RANGE).getValue(); 
    var emailTemplate = templateSheet.getRange(EMAIL_TEMPLATE_CELL_RANGE).getValue(); 

    // Create one JavaScript object per row of data. 
    objects = getRowsData(dataSheet, dataRange); 

    // For every row object, create a personalized email from a template and send 
    // it to the appropriate person. 
    for (var i = 1; i < objects.length; ++i) { 
    // Get a row object 
    var rowData = objects[i]; 
    //Logger.log(rowData.status); 
    // Generate a personalized email. 
    // Given a template string, replace markers (for instance ${"First Name"}) with 
    // the corresponding value in a row object (for instance rowData.firstName). 
    var emailText = fillInTemplateFromObject(emailTemplate, rowData); 
    var msgPlain = emailText.replace(/(<([^>]+)>)/ig, ""); // clear html tags for plain mail 
    if (rowData.status == EMAIL_NOT_SENT) { 
    //MailApp.sendEmail(rowData.email, emailSubject, msgPlain, { htmlBody: emailText }); 

    var statusCell = dataSheet.getRange(i+1,4,1); 

    if (!isCellEmpty(statusCell) && statusCell.getValue() != STATUS_COLUMN_NAME) { 
     Logger.log(statusCell.getA1Notation()); 
     Logger.log(objects.length); 
     //statusCell.setValue(EMAIL_SENT); 
    } 
    } 
} 
} 

記錄輸出:

[14-09-24 03:17:45:161 EEST] D2 
[14-09-24 03:17:45:162 EEST] 5.0 
[14-09-24 03:17:45:166 EEST] D3 
[14-09-24 03:17:45:166 EEST] 5.0 
[14-09-24 03:17:45:170 EEST] D4 
[14-09-24 03:17:45:170 EEST] 5.0 
[14-09-24 03:17:45:173 EEST] D5 
[14-09-24 03:17:45:174 EEST] 5.0 
+0

我還沒有測試過,但它似乎是跳過rowsData中的第一個對象。嘗試循環(var i = 0; i 2014-09-24 04:21:07

回答

2

這條線:

for (var i = 1; i < objects.length; ++i) { 

被1至4個迭代(因爲object.length = 5)因爲對象屬性(如數組)是0索引。

表方法(如getRange())從1計數(不存在行0)所以,當使用

var statusCell = dataSheet.getRange(i+1,4,1); 

你指定了錯誤的行(一個以上的對應的數據)。

您可以通過使用

var statusCell = dataSheet.getRange(i+2,4,1);

+1補償係數差+1跳過頭解決這個問題很簡單。

你可以很容易地通過記錄我的值(這將顯示1,2,3,4)和rowData的相應屬性(rowData for i = 1是sheet sheet 3,rowData for i = 2是表第4行等)