【问题标题】:Cannot write HSSFWorkbook to ByteArray and then read it to HSSFWorkbook无法将 HSSFWorkbook 写入 ByteArray,然后将其读取到 HSSFWorkbook
【发布时间】:2013-08-21 16:28:53
【问题描述】:

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: Invalid header signature;读取 0x0005060000100809,预期 0xE11AB1A1E011CFD0

(我使用的是 Apaches POI 3.5-beta3)

我希望有人可以帮助我...我怎样才能让它工作?!

【问题讨论】:

  • 你为什么使用这么旧的 POI 版本?虽然我不确定,但我敢打赌更新至少会有所帮助。最新的稳定版本是 3.9。
  • 因为我也使用旧的 primefaces 版本:(...更新它会做很多工作,现在无法完成

标签: java stream bytearray apache-poi


【解决方案1】:

您没有正确编写工作簿!您需要使用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打开。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多