2012-10-18 166 views
1

我對javascript很感興趣,並嘗試在Google電子表格和郵件中使用Mail Merge功能。我複製了教程腳本並做了一些必要的修改(至少我能想到)。但是當我試圖運行腳本時,我得到了TypeError:無法從null讀取屬性「length」。 (第43行)TypeError:無法從null讀取屬性「length」

上面提到的43行是for循環。有人可以幫助讓我知道要修復什麼,所以我可以運行腳本?

// Replaces markers in a template string with values define in a JavaScript data object. 
// Arguments: 
// - template: string containing markers, for instance ${"Column name"} 
// - data: JavaScript object with values to that will replace markers. For instance 
//  data.columnName will replace marker ${"Column name"} 
// Returns a string without markers. If no data is found to replace a marker, it is 
// simply removed. 
function fillInTemplateFromObject(template, data) { 
    var email = template; 
    // Search for all the variables to be replaced, for instance ${"Column name"} 
    var templateVars = template.match(/\$\{\"[^\"]+\"\}/g); 
    // Replace variables from the template with the actual values from the data object. 
    // If no value is available, replace with the empty string. 
    for (var i = 0; i < templateVars.length; ++i) { 
     // normalizeHeader ignores ${"} so we can call it directly here. 
     var variableData = data[normalizeHeader(templateVars[i])]; 
     email = email.replace(templateVars[i], variableData || ""); 
    } 
    return email; 
} 

回答

0

如果沒有匹配的正則表達式,templateVars將爲空。你需要在循環之前檢查它。

UPDATE:

if (templateVars !== null) { 
    for (var i = 0; i < templateVars.length; i++) { 
     ... 
    } 
} 
+0

嗯...對不起,我希望我知道更多關於javascript的信息,但我不知道。我不太明白如何檢查它。 – user1755506

+0

你知道如何編寫'for'循環而不是'if'語句嗎?查看更新的答案。 – Barmar

+0

我從Google文檔中提取了該腳本。 :)需要調整它來滿足我的要求。有問題調整。對不起... – user1755506

0

我只是有這個同樣的問題,但OP是有我不認爲這個問題是一個涉及到的代碼。

這是Google在其教程中提供的電子郵件模板的格式。

的佔位符${"First Name"}但是這取決於你如何編輯這些你可以得到${「First Name」}這是完全不同的

的區別是" VS的 一個是垂直的(作品),另一個是「斜體」(不起作用)

有人知道計算機如何格式化數據將能夠解釋這一點的重要性,但只是它打破了代碼。

+0

它被稱爲聰明的報價。 – Unihedron

相關問題