2013-05-01 77 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()。

您应该相应地更新您的代码。

相关问题