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

时间:2018-06-01 10:38:42

标签: java excel io filestream

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

  

java.io.IOException:无效的标头签名;读取0x6576206C6D783F3C,预期为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));
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

"期待"和"实际"文件签名以与正常相反的顺序输出。 (这可能是一个大端与小端的事情......)

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

  D0 CF 11 E0 A1 B1 1A E1

匹配"预期"签名(反转)。所以,如果我反转"实际"签名,我得到

  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的格式,而不是传统的&#34; .xls&#34;格式。我猜这个文件在&#34; .xlxs&#34;格式或类似。

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