5i需要将HSSFWorkbook (Apache的POI)转换为ByteArray,然后再将ByteArray转换回HSSFWorkbook。下面的TestCase说明了我的问题:
@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:无效头签名;读取0x0005060000100809,预期0xE11AB1A1E011CFD0
(我使用的是ApachesPOI3.5-beta3)
我希望有人能帮我。我怎么才能让它起作用!
发布于 2013-08-19 20:40:50
您没有正确地编写工作簿!您需要使用写(输出流)调用。
如网站上的各种例子所示,您的代码应该是:
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的文件,请不要打开一个工作簿。从文件使用内存比来自流的内存少打开。
https://stackoverflow.com/questions/18321201
复制相似问题