1

まず第一に、他の Java API と同様に、Apache POI API を使用するのはあまり簡単ではないと感じています。これは、docx の内容を変更する場合に必要なすべての jar ファイルが何であるか混乱しているためです。私は poi-scratchpad-3.1-beta1 を使用しています.jar および poi-3.2-FINAL-20081019.jar (HWPFDocument クラス) ですが、一部のフォーラムでは、別の poi jar ファイルの別の名前と別のバージョンを指していました... (クラス XSSFDocument を使用することを示しています)。

私の要件は、一部のテキストを一部のファイルの内容に置き換えることです。このために、次のコードを使用して Microsoft 2007 (docx ファイル) の内容を置き換えています。そして、私は..というエラーで終わりました.

org.apache.poi.poifs.filesystem.OfficeXmlFileException: 提供されたデータは Office 2007+ XML にあるようです。POI は OLE2 Office ドキュメントのみをサポートします

import java.io.*;
import org.apache.poi.POIDocument;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class GenerateTicket {

    public static void main(String[] args) {

        final String FILE_PATH = "/home/mateen/Desktop/Ticket.docx";
        try {
            File file = new File(FILE_PATH);
            FileInputStream fis = new FileInputStream(file);
            POIFSFileSystem poifs = new POIFSFileSystem(fis);
            HWPFDocument doc = new HWPFDocument(poifs);
            Range range = doc.getRange();
            CharacterRun run = range.insertAfter("Hello POI CORE/HWPF !!!");
            run.setBold(true);
            run.setItalic(true);
            doc.write(new FileOutputStream("/home/mateen/Desktop/FromTicket.Docx"));

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

それで...

  • なぜ2つの別々のjarファイルが必要なのかを知っている人はいますか?
  • コードを機能させるために何ができますか?
4

1 に答える 1

3

HWPF は、古い OLE2 ベースの .doc ファイルで動作します。新しい OOXML .docx ファイルを使用する場合は、代わりに XWPF を使用する必要があります。

次に、古いバージョンの POI を使用しており、その時点で一致していないバージョンを使用しています。最新バージョンを使用していることを確認し、すべての POI jar がすべて同じバージョンのものであることを確認してください。必要な Jar とその依存関係を確認するには、コンポーネントの概要ページで詳細を確認してください。

于 2012-11-19T15:42:58.723 に答える