2016-08-08 1 views
0

poiで特定の位置にテーブルを挿入すると、テーブルが生成されますが、このテーブルは表示されません。HWPF-POI:poi hwpfのdocへのテーブルの挿入が見えません

macOSとそのテキストツールを使用してこのドキュメントをプレビューまたは編集するときに、生成されたdocテーブルが表示されます。POIはテーブルとコンテンツも読み取ることができます。私はプロセスを表示するために4枚の写真をアップロードする予定ですが、私は2枚の画像しか投稿できません。申し訳ありません。

@Test 
public void exportDoc() throws Exception { 
    FileInputStream readFile = new FileInputStream(new File(readDoc)); 
    FileOutputStream replaceFile = new FileOutputStream(new File(replaceDoc)); 
    HWPFDocument document = new HWPFDocument(readFile); 
    Table table = WordUtil.insertNewTable(document,"${table}"); 
    insertTableInDoc(table); 
    document.write(replaceFile); 
    readFile.close(); 
    replaceFile.close(); 
} 

private Table insertNewTable(HWPFDocument doc, String sourceValue) { 
    Range range = doc.getRange(); 
    Table table = null; 
    for (int i = 0; i < range.numSections(); ++i) { 
     Section s = range.getSection(i); 
     for (int x = 0; x < s.numParagraphs(); x++) { 
      Paragraph p = s.getParagraph(x); 
      if (p.text().contains(sourceValue)) { 
       //remove target text 
       range.replaceText(sourceValue, ""); 
       table = p.insertTableBefore((short) 3, 3); 
       return table; 
      } 
     } 
    } 
    return table; 
} 

private void insertTableInDoc(Table table) { 
    int count = 1; 
    for (int rowNum = 0; rowNum < table.numRows(); rowNum++) { 
     TableRow tableRow = table.getRow(rowNum); 
     for (int colNum = 0; colNum < tableRow.numCells(); colNum++) { 
      TableCell cell = tableRow.getCell(colNum); 
      Paragraph paragraph = cell.getParagraph(0); 
      CharacterRun characterRun = paragraph.getCharacterRun(0);   
      characterRun.insertBefore("number: " + count++); 
     } 
    } 
} 
  1. the original doc

  2. the doc after table insert

PS:

これはMacの問題のためのマイクロソフトではないと確信していますが、Windowsプラットフォームのdocのgenerateテーブルも表示されません。 HWPFプロジェクトの現在の状態と

(何か問題や、私の表現が明確でない場合は、質問をするのは初めてで、私に知らせてくださいと私は遅滞なく、それを修正します。おかげで)

+0

お客様の情報:問題を再現できます。 insertTableBeforeで追加されたテーブルの幅が0に固定されているかのように見えますが、Word GUIでもこれを修復できません。しかし、私はもうHWPF(バイナリワードフォーマット)を自分では気にしません。この形式は2007年以降のものです.XWPF(Office OpenXML)は現在の形式です。誰も答えなかったので、私はこの意見を持つ唯一の人ではないと信じています。 –

+0

ありがとうございました。私は前にdocとdocxの違いについて私のプロダクトマネージャーに説明しましたが、彼女はdocタイプをサポートすることを主張しました。私たちの戦略を変えなければならないようです。 –

答えて

1

、あなたはおそらく.docファイルにコンテンツを挿入しようとすると、不運になります。あなたの最善の策は、別の形式(docx)を使用することです。

私は過去年HWPFを見ていなかったので、私はHWPFの現在の状態に関するここで間違っている可能性があります:

何年か前、私はクライアントのためのカスタムHWPFライブラリを開発していました。カスタムライブラリの主な目標は.docファイルを変更する機能であり、Wordは変更されたファイルを正しく処理できます。したがって、私は、.docファイルを変更するレベルが何回失敗するかを知っています。パブリックHWPFライブラリは、変更(テキストボックス、2バイト文字範囲、シェイプファイル、ネストしたテーブルなど)に関しては、.docファイル形式の多くの側面を処理することができません。

修正を正しく処理するには、特定の.docファイルのすべての「機能」をライブラリでサポートする必要があります。したがって、.docファイルに図形がある場合、HWPFは、単純なテキストスニペットが挿入され、図形に触れていない場合でも、図形の位置表を調整する必要があります。図形が処理されない場合、出力ファイルを開くときにWordがクラッシュします。

可能であれば、docxまたはrtfを使用してください。オプションの場合は、.docファイルを扱うことができる商用ライブラリの1つを試してみてください。

+0

大変ありがとうございました。あなたはPOIに関する多くの社内詳細を理解しており、あなたの提案は合理的です。本当にあなたの答えを感謝:) –

関連する問題