5i 需要将 HSSFWorkbook(Apache 的 POI)转换为 ByteArray,然后将 ByteArray 转换回 HSSFWorkbook。以下测试用例说明了我的问题:
@Test
public void testXLSExportImport(){
try {
InputStream is = new FileInputStream(FILEPATH);
HSSFWorkbook wb = new HSSFWorkbook(is);
byte[] exported = wb.getBytes();
HSSFWorkbook wb2 = new HSSFWorkbook(new ByteArrayInputStream(exported));
//in the line above the exception is thrown
} catch (Exception e) {
assertTrue(false);
}
}
测试用例失败并出现异常:java.io.IOException:无效的 header 签名;读取 0x0005060000100809,预期为 0xE11AB1A1E011CFD0
(我正在使用 Apache POI 3.5-beta3)
我希望有人能帮助我...我怎样才能让它工作?!
最佳答案
您没有正确编写作业簿!您需要使用 write(Outputstream)打电话。
如various examples on the website所示,您的代码应该是:
InputStream is = new FileInputStream(FILEPATH);
HSSFWorkbook wb = new HSSFWorkbook(is);
ByteArrayOutputStream out = new ByteArrayOutputStream();
wb.write(out);
HSSFWorkbook wb2 = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
此外,如果您有直接使用的文件,请不要从 FileInputStream 打开工作簿。从文件打开 uses less memory than from a Stream .
关于java - 无法将 HSSFWorkbook 写入 ByteArray,然后将其读取到 HSSFWorkbook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321201/