【问题标题】:Duplicating a page of a document and replacing text on each page复制文档的一页并替换每页上的文本
【发布时间】:2012-05-30 23:29:53
【问题描述】:

我正在尝试创建一个脚本,该脚本将获取 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() 正常工作。我上面的脚本正在正确创建文档,但没有将第二组信息插入第二页,第三组插入第三页,等等。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    您必须仅在复制段落后替换文本,因为如果您在之后执行此操作,占位符将已被替换,并且不会出现在下一个副本中。你可以这样做:

    //...
    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() 函数以读取我的电子表格行以代替我手动输入以替换文档文本的数组的任何提示。再次,非常感谢任何帮助。
    【解决方案2】:

    以下代码将读取您的电子表格并创建一个名为 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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多