Вопрос по – Дублирование страницы документа и замена текста на каждой странице

4

Я пытаюсь создать скрипт, который будет принимать шаблон документа Google 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   ответа
0

менем data.

var sh = SpreadsheetApp.getActive().getActiveSheet();
var lastRow = sh.getLastRow();
var lastCol = sh.getLastColumn();
var data = sh.getRange(1, 1, lastRow, lastCol).getValues();
На самом деле вам не нужно получать последние строки и столбцы. Просто сделайте:var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues() Henrique G. Abreu
3

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

//...
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();
Спасибо. это прекрасно работает для добавления страниц, довольно просто, но я новичок в этом. любые советы по получению функции getRowsData () для чтения строк моей электронной таблицы, которые будут использоваться вместо массивов, которые я вручную набрал для замены текста документа. Опять же, любая помощь очень ценится. Evan Caldwell

Похожие вопросы