3

を使用して特定のテキストが含まれている場合、ファイルのHWPFDocument paragraphテキストを置き換える必要があります。テキストを置き換えます。しかし、プロセスは出力テキストを奇妙な方法で書き込みます。この問題を修正するのを手伝ってください。使用したコード スニペット:.docjava

public static HWPFDocument processChange(HWPFDocument doc)
{
    try
    {
        Range range = doc.getRange();
        for (int i = 0; i < range.numParagraphs(); i++)
        {
            Paragraph paragraph = range.getParagraph(i);
            if (paragraph.text().contains("Place Holder"))
            {
                String text = paragraph.text();
                paragraph.replaceText(text, "*******");

            }
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
    return doc;
}

入力:

Place Holder 
Textvalue1
Textvalue2
Textvalue3

出力:

*******Textvalue1
Textvalue1
Textvalue2
Textvalue3
4

1 に答える 1

3

HWPF ライブラリは、.doc ファイルの変更や書き込みを行うのに完全な状態ではありません。(少なくとも最後に見たときは。しばらく前に、クライアント用にHWPFのカスタムバリアントを開発しました。これは、他の多くのものの中でも、正しい置換および保存操作を提供しますが、そのライブラリは公開されていません。)

絶対に .doc ファイルと Java を使用する必要がある場合は、まったく同じ長さの文字列に置き換えることで回避できます。たとえば"12345"-> "abc__"(_スペースまたはあなたに合ったものです)。置換する文字列の絶対位置を doc ファイル内で (HWPF を使用して) 見つけ、それを doc ファイル内で直接 (HWPF を使用せずに) 変更することは理にかなっています。

Word ファイル形式は非常に複雑で、「正しく処理する」ことは簡単な作業ではありません。多くの人月を費やそうとしない限り、ライブラリの一部を修正して保存するだけではうまくいかないでしょう。多くのデータ構造は非常に正確に処理する必要があり、1 回の「ミス」により、生成された出力ファイルで Word がクラッシュします。

于 2015-04-29T13:58:19.447 に答える