0

poiで特定の位置に表を挿入したいのですが、表は生成されるのですが、この表が見えていません。

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. 元のドキュメント

  2. テーブル挿入後のドキュメント

PS:

これは microsoft for mac の問題ではないと確信しています。Windows プラットフォームのドキュメントの生成テーブルも表示されません。

(初めて質問するので、何か間違っていることや私の表現が明確でない場合はお知らせください。遅滞なく修正します。ありがとう)

4

1 に答える 1

2

HWPF プロジェクトの現在の状態では、コンテンツを .doc ファイルに挿入しようとするとうまくいかない可能性があります。別の形式 (docx) を使用することをお勧めします。

私は過去 1 年間 HWPF を見ていませんでした。そのため、HWPF の現在の状態に関してここで間違っている可能性があります。

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

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

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

于 2016-08-12T08:57:49.220 に答える