如何解决无效的 header 签名;读取 0x6576206C6D783F3C,预期 0xE11AB1A1E011CFD0 错误 java?

How to resolve Invalid header signature; read 0x6576206C6D783F3C, expected 0xE11AB1A1E011CFD0 error java?

我正在从 .xls 格式的 Web 应用程序导出文件。当我试图读取这个文件时,它抛出错误:

java.io.IOException: Invalid header signature; read 0x6576206C6D783F3C, expected 0xE11AB1A1E011CFD0

这是导出文件,因此无法更改格式。

这是我的代码,附件是 excel 文件:

public void verifyExportedData() throws Exception{
    String filename = "Top_Down_Planning_by_Investment.xls"      
    File=new FileInputStream(new File("testdata/"+filename));
    HSSFWorkbook workbook = new HSSFWorkbook(File);
    HSSFSheet sheet=workbook.getSheet("Top Down Planning by Investmen");
    DataFormatter formatter = new DataFormatter();
    System.out.println("Cell data : "+sheet.getRow(0).getCell(1));
}

有人可以帮忙吗?

"expected" 和 "actual" 文件签名正在以与正常相反的顺序输出。 (这可能是大端与小端的区别...)

根据我在网上找到的来源,“.xls”文件的文件签名是

  D0 CF 11 E0 A1 B1 1A E1

匹配 "expected" 签名(反向)。所以如果我反转 "actual" 签名,我会得到

  3C 3F 78 6D 6C 20 76 65

如果我将这些十六进制代码转换为 ASCII,我会得到

  '<' '?' 'x' 'm' 'l' ' ' 'v' 'e'

  <?xml ve

这看起来很眼熟吗?这是一个典型的 XML 文件头:

  <?xml version="1.0" encoding="UTF-8" standalone="no" ?>

您似乎已将文件导出为基于 XML 的格式,而不是旧的“.xls”格式。我猜该文件是“.xlxs”格式或类似格式。

我认为您需要使用 XSSF 而不是 HSSH: