NotOLE2FileException:无效的标头签名;读取0x0000000000000000,预期0xE11AB1A1E011CFD0 - 文件似乎不是有效的OLE2文档

时间:2016-03-20 20:29:05

标签: java apache-poi

alarmtime_Activity

我正在尝试使用java创建简单的excel文件。我收到了上述错误。

2 个答案:

答案 0 :(得分:2)

你的问题就在这里:

    if (!file.exists()) file.createNewFile();

这会创建一个全新的0字节文件,该文件不是有效的Excel文件。这就是POI对象的原因。

此外,您使用的是旧版本的Apache POI。如果你足够愚蠢地要求他们读取零字节文件,那么较新的例外会提供更有用的例外

考虑到advice on Files vs InputStreams,但注意到您正在进行已打开文件尚未完全支持的就地写入,请将您的代码更改为:

Workbook workbook = null;
File file = new File("file4.xls");
if (!file.exists()) {
   if (file.toString().endsWith(".xlsx")) {
      workbook = new XSSFWorkbook();
   } else {
      workbook = new HSSFWorkbook();
   }
} else {
   workbook = WorkbookFactory.create(new FileInputStream(file));
}

这适用于.xls.xlsx个文件,并避免使用错误

虽然你真的应该升级你的Apache POI版本......

答案 1 :(得分:2)

打开文件一次。 单击“另存为”一次检查文件。如果它是从HTML生成的,则将在下拉菜单中显示为网页(* .htm, .html)。 您可以将其另存为Excel 97-2003工作簿( .xls),然后重试以读取代码。以我为例。