【问题标题】:How can I convert POI HSSFWorkbook to bytes?如何将 POI HSSFWorkbook 转换为字节?
【发布时间】:2012-04-28 12:33:04
【问题描述】:

调用 Simple toBytes() 确实会产生字节,但 exel 会引发警告。

丢失的文件信息

谷歌搜索给了我这个link 并查看Javadocs 的工作表和POI HOW-TO 说类似的话。基本上我不能在不丢失一些信息的情况下获得Bytes,而应该使用write 方法。

虽然 write 工作正常,但我确实需要将字节发送过来。有什么办法可以做到吗?那就是在没有任何警告的情况下获取字节。

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:

    正如那个邮件列表帖子所说

    调用HSSFWorkbook.getBytes() 不会返回重新调用所需的所有数据 构建一个完整的 Excel 文件。

    您可以使用带有ByteArrayOutputStream 的写入方法来获取字节数组。

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        workbook.write(bos);
    } finally {
        bos.close();
    }
    byte[] bytes = bos.toByteArray();
    

    close 调用对于ByteArrayOutputStream 来说并不是真正需要的,但恕我直言,无论如何它都是一种很好的风格,以防它后来更改为不同类型的流。)

    【讨论】:

    • 我们怎样才能以相反的方式做到这一点..?我的意思是 HSSFWorkbook 的字节数组?
    • @ChetanNellekeri 最好单独提出这个问题
    • 对于任何使用 C# 的人来说,这也很有效,ByteArrayOutputStream 在 NPOI.utils 中可用
    【解决方案2】:

    怎么样:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    workbook.write(baos);
    byte[] xls = baos.toByteArray();
    

    为了得到一个完整的excel文件,你必须调用write(OutputStream)方法。如果你想从中得到字节,只需给出一个 ByteArrayOutputStream

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2018-08-25
      • 2011-09-21
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2016-11-19
      相关资源
      最近更新 更多