2012-05-08 61 views
0

我試圖創建一個腳本,它從Google文檔中的電子表格中讀取值(名稱,日期等)並自定義特定表單的描述(文本內容)用這些值發送給用戶。但是string.replace()方法不像我預期的那樣工作。它沒有任何東西取代關鍵。我錯過了什麼嗎?我花了數小時搜索沒有答案。任何幫助將不勝感激。Google文檔應用程序腳本:表單內容string.replace()方法不起作用

var docId = ScriptProperties.getProperty("QuestionnaireDocId"); 

var sheet = SpreadsheetApp.getActiveSheet(); 
var startRow = 2; // First row of data to process 
var numRows = 1000000; // Number of rows to process 
// Fetch the range of cells A2:B3 
var dataRange = sheet.getRange(startRow, 1, numRows, 5) 
// Fetch values for each row in the Range. 
var data = dataRange.getValues(); 

for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var name = row[0]; // this var isn't empty. - tested it to check 

    var formSpreadsheet = SpreadsheetApp.openById(docId); 
    var sFormUrl = formSpreadsheet.getFormUrl(); 
    if(sFormUrl) { 
     var response = UrlFetchApp.fetch(sFormUrl); 
     var sFormContent = response.getContentText(); 

     //Replace <keyName> in the form description with the value of var 'name' 
     sFormContent = sFormContent.replace("<keyName>", name); 


     //get only body content 
     sFormContent = sFormContent.replace(/[\s\S]+<body[^>]*>([\s\S]+)<\/body>[\s\S]+/i, '$1'); 

     //remove script 
     sFormContent = sFormContent.replace(/<script[^>]*>[\s\S]*<\/script>/i, ''); 
     //add inline style for form elements, since gmail does not allow style tag and  link tag to style it 
     sFormContent = sFormContent.replace(/class\=\"errorbox-good\"/gi, 'class="errorbox-good" style="margin-bottom:1.5em;zoom:1"'); 
     sFormContent = sFormContent.replace(/class\=\"ss-q-title\"/gi, 'class="ss-q-title" style="display:block;font-weight:bold;"'); 
     sFormContent = sFormContent.replace(/class\=\"ss-q-help\"/gi, 'class="ss-q-help" style="display:block;color:#666;margin:.1em 0 .25em 0"'); 
     sFormContent = sFormContent.replace(/class\=\"ss-choices\"/gi, 'class="ss-choices" style="list-style:none;margin:.5em 0 0 0;padding:0;"'); 
    } 
    var mailBody2; 

    if(sFormUrl) { 
     mailBody2 = '<br /><br />If you have trouble viewing or submitting this form, you can fill it out online:<br />'; 
     mailBody2 += '<a href="' + sFormUrl + '" title="">' + sFormUrl + '</a>'; 
     mailBody2 += '</body></html>'; 
     mailBody2 += '<br /><br />'; 
     mailBody2 += sFormContent; 
     mailBody2 += '<br />'; 
    }  


    // Embed form and send the email - the emails work fine 

    var subject = "Test email"; 

    MailApp.sendEmail(email_address, subject, mailBody2, {htmlBody: mailBody2}); 

} 

回答

1

看起來好像有一些事情正在進行,導致這不會像書面工作。首先,在您從UrlFetchApp調用中獲取的表單內容中,有兩處表單描述顯示的地方。一個看起來像這樣。我只是把FOO在我的表格的說明字段:

<meta itemprop="description" content="foo &lt;keyName&gt;"> 

和其他看起來像這樣:

<div class="ss-form-desc ss-no-ignore-whitespace">foo </div> 

第二個實例是,實際上顯示在您的電子郵件的一個,並且,你可以看來,它似乎已被剝離出來。我的猜測是,它剝離了任何看起來可能是HTML的東西。

所以這裏是我試過的,這對我有用。在你的表單描述中,把[keyName]代替。

然後,您還需要全局搜索和替換,而不僅僅是[keyName]的第一個實例,以確保您在兩個位置都能找到它。因此,改變這一行:

sFormContent = sFormContent.replace("<keyName>", name); 

這樣:

sFormContent = sFormContent.replace(/\[keyName\]/g, name); 

一旦我做了這些改變,我能得到它的工作,在我收到的郵件包含在描述從我的電子表格中的值,在'foo'之後。

+0

非常感謝!這工作完美。 – zeqof

相關問題