3

フォームに記入して自動レポートを作成しようとしています。データは、スプレッドシートの最後の行からスクリプトによって読み取られます。次に、レポートはGoogleドキュメントとして作成されます。ここで、このドキュメント内のいくつかのタグは、アイテムがあるべき場所を示しています。%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 !! :)
4

1 に答える 1

3

Aには、子要素も含むTableRowタイプの子要素が含まれます。空白またはテキストが含まれている場合、TableCellこれらはタイプです。PARAGRAPH

TableCellwith内のテキストにアクセスできますが、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%)
...
于 2012-12-22T04:31:47.477 に答える