我正在从.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));
}
谁能帮忙?
"预期"和"实际"文件签名的输出顺序与正常顺序相反。 (这可能是大端与小端的事情...
根据我在网上找到的消息来源,".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 的格式,而不是旧的".xls"格式。 我猜该文件是".xlxs"格式或类似格式。
我认为您需要使用XSSF而不是HSSH:
- https://poi.apache.org/spreadsheet/