0

テンプレートからドキュメントを作成していますが、表を正しい位置に挿入する方法がわかりません。

2D 配列としてメモリ内にテーブルがあり、テンプレートには次のようなプレースホルダーがあります (角かっこを含む):

... [表 1] ... [表 2] ... [表 3] ...

これらのプレースホルダーはそれぞれ 1x1 テーブルにあります。

最初の配列を正しい位置に挿入することができましたが、次のプレースホルダーを検索すると、配列は常に表 1 の後に挿入されます。

私のコードは次のとおりです(これをオンラインで見つけて、少し修正しました):

function insertTable(targetdoc, stringToReplace, tableValues) {
  var body = targetdoc.getBody();     
  var searchElement  = targetdoc.getActiveSection();
  var searchType = DocumentApp.ElementType.TABLE;
  var searchHeading = DocumentApp.ElementType.TABLE_CELL;
  var searchResult = null;

  // Search until the table is found.
  while (searchResult = searchElement.findElement(searchType, searchResult)) {
    var par = searchResult.getElement().asTable();
    var tabletext = par.getText();
    var substr=tabletext.search(stringToReplace);
    if (substr >0 ) {
      var childindex = body.getChildIndex(par);
      var oTable = body.insertTable(childindex+1, tableValues);
      return oTable;
    }
  }
}

呼び出しコードは次のとおりです。

var oTable   = insertTable(oOutputFile,"["+cFieldID+"]",aTable);

ここで、oOutputfile は新しいドキュメント、cFieldID はプレースホルダー テキスト、aTable は 2D 配列です。

各配列を正しい位置に挿入するために、これを機能させるのを手伝ってくれる人はいますか?

ありがとう

4

2 に答える 2

0

将来的には確かに使用するソリューションを提供してくれた koma に感謝しますが、私が探していたものには少しやり過ぎでした。

最後に、巨大なデバッグ セッションの後に必要なものに対する解決策を見つけました。上記の関数は次のようになりました。

function insertTable(targetdoc, stringToReplace, tableValues) {
  var oDoc   = targetdoc.getBody();                    // Document
  var oSR    = oDoc.findText(stringToReplace);         // SearchResult
  var oPara  = oSR.getElement().asText().getParent();  // Paragraph
  var nIndex = oDoc.getChildIndex(oPara);              // Index
  var oTable = oDoc.insertTable(nIndex, tableValues);  // Table
  return oTable;
}

たとえば、次のプレースホルダーを持つドキュメント (oDoc) があるとします。

[TABLE 1]

配列

aData: {{"","column 1","column 2"},{"row 1","data 11","data 12"},{"row 2","data 21","data 22"}}

と変数

cFieldID = "TABLE 1"; 

そして私の関数を呼び出します

oTable = insertTable(oDoc, cFieldID, aData);
oOutputFile.replaceText("\\["+cFieldID+"\\]","");

プレースホルダー テキストの代わりに以下を取得します

-----------------------------------
|       |  column 1  |  column 2  |
-----------------------------------
| row 1 |   data 11  |   data 12  |
-----------------------------------
| row 2 |   data 21  |   data 22  |
-----------------------------------

これは koma のソリューションほど一般的ではなく強力ではありませんが、現時点で必要なものには十分です。

クリス

于 2013-08-28T10:49:41.230 に答える