我正在从.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));
}
有人可以帮忙吗?
答案 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: