2013-05-01 75 views
0

這是我的代碼,我無法弄清楚爲什麼replaceText()不起作用。無法通過replaceText訪問Google Apps腳本文檔

function createDoc(){ 
    var templateid = "1jM-6Qvy47gQ45u88WfDU_RvfuSTsw27zBP_9MfsUGr8"; // get template file id 
    var FOLDER_NAME = "Completed Rental Agreements"; // folder name of where to put doc 
// get the data from an individual user 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var data = sheet.getRange(2, 1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues(); 
    var lastRow = sheet.getLastRow(); 

    var firstName = sheet.getRange(lastRow, 2, 1,1).getValues(); 
    var lastName = sheet.getRange(lastRow, 3, 1,1).getValues(); 
    var guestEmail = sheet.getRange(lastRow, 7, 1,1).getValues(); 
    var companyEmail = "[email protected]"; 
    var companyName = "Bear Lake Project Management"; 
    var username = "[email protected]"; // get their email (from sheet name) 
    var me = "[email protected]"; 

    //Copy Template 
    var docid = DocsList.getFileById(templateid).makeCopy("Rental Agreement - "+firstName+""+lastName+"-"+guestEmail).getId(); 
// var file = DocsList.getFileById(docid).addEditors(me); 

// move file to right folder 
    var file = DocsList.getFileById(docid); 
    var folder = DocsList.getFolder(FOLDER_NAME); 
    file.addToFolder(folder); 

    var doc = DocumentApp.openById(docid); 
    var body = doc.getActiveSection(); 
    var body_text = doc.addEditor("[email protected]"); 


// Append Cabin Rules 
// doc.appendParagraph("This is a typical paragraph."); 
body.replaceText("/^companyEmail$/", "test"); 
body.replaceText("%companyName%", "test1"); 
body.replaceText("%todayDate%", "test1"); 
doc.saveAndClose(); 

}

我試過doc.replaceText和body.replaceText與其他幾個選項。

任何想法爲什麼這不起作用?

預先感謝

+1

請描述你的意思是「無法正常工作」。 – Mogsdad 2013-05-01 01:03:20

回答

2

考慮一下:

body.replaceText("%companyName%", "test1"); 

這將尋找 「的companyName」 和 「%」 的每一個實例在它的兩側。這種情況下的「%」就是這樣,一個標點符號在一個陌生的地方。這是一種用於減少意外地替換文檔中真實文本的可能性的慣例。

您的模板文檔必須具有確切的替代模式。 (你的不是......而是你只有「公司名稱」,將它改爲「%companyName%」)。對你想要做的任何其他替換應用該規則。


您可以從一些優化中受益。

... 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    // Next line is hard to maintain - there's a better way. 
    // var data = sheet.getRange(2, 1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues(); 
    // Read whole spreadsheet, skip headers 
    var data = sheet.getDataRange().getValues().slice(1); 

    // Already read in all data, use it instead of reading sheet again. 
    var firstName = data[data.length-1][2-1]; // (2-1) because array counts from 0 
    var lastName = data[data.length-1][3-1];  // while spreadsheet columns from 1 
    var guestEmail = data[data.length-1][7-1]; // Better: put these into variables. 
    ... 

雖然與您的代碼嘗試,我遇到了一個問題,自動完成與doc.getActiveSection()。事實證明,根據release notes for April 15 2013,最近發生了一些變化。

將Document.getActiveSection()重命名爲getBody()。

您應該相應地更新您的代碼。

相關問題