当前位置: 首页 > 知识库问答 >
问题:

阅读文档并使用Apache POI重写,但无法使用office打开

荀裕
2023-03-14

我试图用Java中的Apache POI修改一个文档。

首先,测试.doc无法读取,并引发异常:

" org . Apache . poi . poifs . file system . notole 2 file exception:无效的标头签名;读取0x6576206C6D783F3C,预期的0xE11AB1A1E011CFD0 -您的文件似乎不是有效的OLE2文档"

所以我把文档保存为“word 97-03”格式,然后POI可以正确阅读文档。

但是,当我尝试将内容重写为没有任何更改的新文件时,MS Office无法打开文件输出.doc。

当我使用MS Office自己制作新文档时,POI运行良好,一切正常。

所以问题是“test.doc”。

test.doc是由某种程序生成的,我无法访问代码,所以我不知道出了什么问题。

我的问题是:

1.既然test.doc可以被MS Office读取,为什么POI不能不保存为新格式的文档?2.既然POI可以读取文档,为什么它不能写回一个新文件(MS Office打不开)?

这是我的代码:

    FileInputStream fis = null;
    try {
        fis = new FileInputStream("test.doc");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    POIFSFileSystem pfs = null;
    try {
        pfs = new POIFSFileSystem(fis);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    HWPFDocument hwdf = null;
    try {
        hwdf = new HWPFDocument(pfs);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File("output.doc"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        hwdf.write(fos);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {

    }

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

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

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

共有1个答案

韦寒
2023-03-14

十六进制的东西读作 ASCII,读小端转换成

Word有时会优雅地打开其他数据格式,保存后将以Word格式正确保存。

因此,您需要使用十六进制编辑器来查看测试的内容.doc如果它真的是某种损坏的格式,则需要找出它的来源以及如何修复该文件的创建。

 类似资料:
  • 问题内容: 尝试使用ApachePOI打开Excel时,我得到 我检查了。没有创建这样的文件夹。我正在使用Apache POI 3.6版。 有什么帮助吗?类似的代码在其他工作区中运行良好。在这里不知所措。 码: 问题答案: 您为什么要制作一个非常好的文件,将其包装在中,然后要求POI必须为您缓冲整个文件,以便可以进行随机访问?如果直接将文件直接传递给POI,生活会好很多,因此可以根据需要跳过它!

  • 用户可以将Excel文档保存为. xls或xml-table。结果是一个具有固定结构的xml-file,Excel可以用它纠正工作。 可以用java中的ApachePOI打开这种类型的excel文件吗? 事先谢谢你,安德烈。

  • 我已经编写了用于编写xlsm(Excel2007)的java文件。 使用ApachePOI库,编写xlsx文件是成功的。编写xlsm文件是成功的。但我无法打开xlsm文件,因为打开xlsm文件时出错。 使用ApachePOI库编写xlsm文件可行吗? 如果可以编写xlsm,请提供如何使用ApachePOI库编写xlsm文件的指南。 谢谢

  • http://poi.apache.org先生明确指出: Office OpenXML Format是Microsoft Office 2007和2008中使用的基于新标准的XML文件格式。这包括XLSX、DOCX和PPTX。该项目提供了一个低级API来支持使用OpenXML4J的开放打包约定。 然后我进入POI的api,发现HPSF有PropertySet,它是访问我想要的元数据的实际类,但XS

  • 在这里,我试图阅读excel文件,并想编辑它,如果需要的话。

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。