需要帮助使用apache poi替换microsoft 2007(HWPFDocument)文档的内容

时间:2012-11-19 14:04:22

标签: java apache apache-poi java-api

首先我感觉它不是很容易使用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文件
  • 我可以做些什么来使我的代码工作?

1 个答案:

答案 0 :(得分:3)

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

接下来,您使用的是旧版本的POI,并且使用了不匹配的POI。您应该确保使用的是最新版本,并确保所有POI罐都来自同一版本。要了解您想要的Jars以及它们具有的依赖关系,请参阅component overview page了解详细信息。