【问题标题】:How to resolve Invalid header signature; read 0x6576206C6D783F3C, expected 0xE11AB1A1E011CFD0 error java?如何解决无效的标头签名;读取 0x6576206C6D783F3C,预期 0xE11AB1A1E011CFD0 错误 java?
【发布时间】:2018-06-01 10:38:41
【问题描述】:

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

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));
}

有人可以帮忙吗?

【问题讨论】:

    标签: java excel io filestream


    【解决方案1】:

    “预期”和“实际”文件签名以与正常相反的顺序输出。 (这可能是 big-endian 与 little-endian 的事情......)

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

      D0 CF 11 E0 A1 B1 1A E1
    

    与“预期”签名匹配(反转)。因此,如果我反转“实际”签名,我会得到 ​​p>

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

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

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

      <?xml ve
    

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

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

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

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

    【讨论】:

    • 感谢@Stephen C 的解释!我正在以 .xls 格式导出文件,该文件是从应用程序中基于 XML 的格式转换而来的。应用程序中有一个链接为“导出到 Excel”,它给出了这个 excel 文件。知道如何成功读取它或使其成为 .xls 标头格式吗??
    猜你喜欢
    • 2016-02-26
    • 2013-07-22
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2019-12-25
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多