1

首先,我觉得它不是很容易使用 Apache POI API,就像任何其他 java 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();
        }

    }
}

所以...

  • 有没有人知道为什么需要两个单独的 jar 文件
  • 我可以做些什么来使我的代码工作?
4

1 回答 1

3

HWPF 适用于较旧的、基于 OLE2 的 .doc 文件。如果要使用较新的 OOXML .docx 文件,则需要改用 XWPF。

接下来,您使用的是旧版本的 POI,以及不匹配的 POI。您应该确保您使用的是最新版本,并确保您所有的 POI jar 都来自同一版本。要弄清楚你想要什么 Jars,以及它们有什么依赖关系,请参阅组件概述页面了解详细信息。

于 2012-11-19T15:42:58.723 回答