替换Google Doc表中的文本以进行表单合并

时间:2012-12-13 22:24:58

标签: google-apps-script

我正在尝试通过填写表单来制作自动报告。脚本从最后一个电子表格行读出数据。然后该报告将作为Google Doc。这里文档中的一些标签显示了项目的位置。 %meterx%适用于米。

这些可以是图像或文字。对于普通段落,这适用于第一个循环,其中type = paragraph。但它会跳过表格。我需要用图像替换表格单元格中的%meterx%,就像我对段落一样,但是我仍然坚持使用代码查看表格。

我看到了一些替换文字的方法,但这似乎是用图像替换它的唯一方法。

  var totalElements = doc.getNumChildren();
  var el=[]
  for( var j = 0; j < totalElements; ++j ) {
  var element = doc.getChild(j);
  var type = element.getType();

   if (type =='PARAGRAPH'){
      el[j]=element.getText()

      if(el[j]=='%meter3%'){element.removeFromParent();
      var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob();   
      doc.insertImage(j, newimage); 

   if (type =='TABLE'){
      var tablerows=element.getNumRows();
      Logger.log(tablerows);
      for ( var i = 0; i < tablerows; ++i ) {
        var tablerow = element.getRow(0)
        Logger.log(tablerow);   // <--- gives TableRow
      }  /// STUCK !! :)

1 个答案:

答案 0 :(得分:3)

TableRow包含类型为TableCell的子元素,它们也包含子元素。如果它们是空白或包含文本,则为PARAGRAPH类型。

您可以使用TableCell访问getText()中的文字,但最好先确认该单元格是否包含文字。

下面的代码处理PARAGRAPHTABLE元素类型,对于表格,它会探索TABLECELL元素。我不知道你在使用数组el[]做了什么,所以我把它遗漏了,并且还注释了图像替换代码 - 相反,我只是记录了数组的结构和内容。表的插图。要完成目标,您应该使用相同的匹配项替换日志记录。替换PARAGRAPH的行为。

注意:我使用了一些未在此处详述的辅助函数,这些函数应该是不言自明的,getFileByName_()elementTypeToText_()

function Q13869576() {
  var folder = "StackOverflow";
  var docname = "Q13869576.gdoc";
  var docId = getFileByName_(folder, docname).getId();

  var doc = DocumentApp.openById(docId);
  var docBody = doc.getActiveSection();

  var totalElements = doc.getNumChildren();
  var el=[]
  for( var j = 0; j < totalElements; ++j ) {
    var element = doc.getChild(j);
    var type = element.getType();

    switch (type) {
      case DocumentApp.ElementType.PARAGRAPH:
        el[j]=element.getText()

        if(el[j]=='%meter3%'){
          Logger.log( "Found tag in paragraph" );
//          element.removeFromParent();
//          var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob();   
//          doc.insertImage(j, newimage);
        }
        break;

      case DocumentApp.ElementType.TABLE:
        var tablerows=element.getNumRows();
        Logger.log(tablerows);
        for ( var row = 0; row < tablerows; ++row ) {
          var tablerow = element.getRow(row)
          for ( var cell=0; cell < tablerow.getNumCells(); ++cell) {
            Logger.log( "Table Row("+row+") Cell ("+cell+")");
            Logger.log(
                  elementTypeToText_(tablerow.getChild(cell).getType())
                  +" with child type "
                  +elementTypeToText_(tablerow.getChild(cell).getChild(0).getType()));
            var celltext = tablerow.getChild(cell).getText();
            Logger.log( "Text is ("+celltext+")" );
          }
        }
        break;
    }
  }
}

这是示例文档中日志的摘录,其中包含一个包含%meter3%标记的单元格的表格:

...
Table Row(1) Cell (2)
TABLE_CELL with child type PARAGRAPH
Text is (%meter3%)
...