2012-05-30 4 views
4

Я пытаюсь создать сценарий, который возьмет документ в документе Doc Doc, сделайте копию, замените определенный текст информацией из строки на моей электронной таблице, добавьте другую страницу заменить текст с информацией из следующей строки в электронной таблице, добавьте еще одну страницу, и т.д.Дублирование страницы документа и замена текста на каждой странице

Вот то, что я до сих пор:

// Global variables 
var templateDocID = ScriptProperties.getProperty("backRxRequestDocID"); 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var activeSheetName = sheet.getName(); 
var user = Session.getUser().getEmail(); 

function requestGen3() { 
    var physName = ["doc john", "doc evan", "doc jane"]; 
    var physAddr1 = ["fake st.", "faker st.", "fakest st."]; 
    var physAddr2 = ["ste 100", "", "ste 209"]; 
      var physCity = ["SLC", "Provo", "Orem"]; 
    var physState = ["UT", "AZ", "NV"]; 
    var physZip = ["84049", "84044", "84601"]; 
      var physPhone = ["8015555555", "7206666666", "4803333333"]; 
    var ptName = ["ed", "sue", "izzy"]; 
    var ptDOB = ["12/10/1979", "1/1/2001", "45/94/4561"]; 
    // Get document template, copy it as a new temp doc, and save the Doc’s id 
    var docID = DocsList.getFileById(templateDocID).makeCopy().getId(); 
    var doc = DocumentApp.openById(docID); 
    var body = doc.getActiveSection(); 
    var pars = doc.getParagraphs(); 
    var bodyCopy = body; 
    for (var i = 0; i < physName.length; ++i) { 
    // Replace place holder keys, 
    body.replaceText('%PHYS_NAME%', physName[i]); 
    body.replaceText('%PHYS_ADDR1%', physAddr1[i]); 
    body.replaceText('%PHYS_ADDR2%', physAddr2[i]); 
    body.replaceText('%PHYS_CITY%', physCity[i]); 
    body.replaceText('%PHYS_STATE%', physState[i]); 
    body.replaceText('%PHYS_ZIP%', physZip[i]); 
    body.replaceText('%PHYS_PHONE%', physPhone[i]); 
    body.replaceText('%PT_NAME%', ptName[i]); 
    body.replaceText('%PT_DOB%', ptDOB[i]);  
    doc.appendPageBreak(); 
    for (var j = 0; j < pars.length; ++j) { 
     doc.appendParagraph(pars[j].copy()); 
    } 
    } 

    // Save and close the document 
    doc.saveAndClose(); 
} 

Я прошел через учебник по чтению из таблицы, но Я не мог заставить getRowsData() и getObjects() работать правильно. Мой скрипт выше правильно создает документ, но не вставляет второй набор информации на вторую страницу и третий набор на третью страницу и т. Д.

ответ

2

Вы должны заменить текст только после копирования абзацев, потому что если вы сделаете это после, заполнители будут уже заменены и не будут присутствовать для следующих копий. Вы можете сделать это следующим образом:

//... 
var pars = doc.getParagraphs(); 
for(var i in pars) //loop to keep a copy of the original paragraphs 
    pars[i] = pars[i].copy(); 

for(var i = 0; i < physName.length; ++i) { 
    body.replaceText('%PHYS_NAME%', physName[i]); 
    //do all your replaces... 
    if(i != physName.length-1) { //has next? 
    doc.appendPageBreak(); 
    for(var j in pars) 
     doc.appendParagraph(pars[j].copy()); 
    } 
} 
doc.saveAndClose(); 
+0

спасибо. который отлично работал для добавления страниц, довольно простой, но я новичок в этом. любые советы по получению функции getRowsData() для чтения строк моей таблицы для использования вместо массивов, которые я вручную напечатал, чтобы заменить текст документа. снова, любая помощь очень ценится. –

0

Следующий код прочитает вашу электронную таблицу и создаст матрицу, называемую данными.

var sh = SpreadsheetApp.getActive().getActiveSheet(); 
var lastRow = sh.getLastRow(); 
var lastCol = sh.getLastColumn(); 
var data = sh.getRange(1, 1, lastRow, lastCol).getValues(); 
+0

На самом деле вам не нужно получать последние строки и столбцы. Просто выполните: var data = SpreadsheetApp.getActiveSheet(). GetDataRange(). GetValues ​​() ' –

Смежные вопросы