若离RuoLi 2023-02-17 14:35 采纳率: 60%
浏览 22
已结题

字节数组在内存中转为excel文件

业务场景:查询文档获取里面的数据,然后组装返回。
问题描述:我现在拿到了文档的base64字符串,我用base64Decoder转为了byte[],现在怎么把字节数组在内存中转为excel文件,然后获取里面的sheet(不止一个)表的字段的数据。我会把字节数组读到本地写成文件,这个比较简单,有四张sheet表,有可能是中文也可能是英文(根据用户操作数据时的界面不同,我下载的文件的sheet表名和表中的字段名也会对应成中文或英文),把本地文件读到内存,网上应该能找到不少,但我不能把文件存到硬盘上转为excel,在从硬盘上读取到内存中获取数据吧,有没有办法可以在内存中直接转为excel,然后读取数据呢?

String  termsFile = String.valueOf(sapResult.get("File"));
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = base64Decoder.decodeBuffer(termsFile);
我pom文件里,目前只有一个apache的
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
  • 写回答

2条回答 默认 最新

  • GameTomato 2023-02-17 14:53
    关注

    可以试试下面方法能不能帮上你
    1.用WorkbookFactory类将字节数组转换为Workbook对象

    byte[] data = ... // base64解码后的字节数组
    InputStream is = new ByteArrayInputStream(data);
    Workbook workbook = WorkbookFactory.create(is);
    

    2.用Workbook对象来访问Excel文件中的各个表单(sheet)

    Sheet sheet = workbook.getSheetAt(0); // 获取第一个表单
    // 或者根据表单名称获取表单
    Sheet sheet = workbook.getSheet("Sheet1");
    

    3.有了表单对象,你可以遍历它的行和单元格,以获取所需的数据:

    for (Row row : sheet) {
      for (Cell cell : row) {
        switch (cell.getCellType()) {
          case Cell.CELL_TYPE_STRING:
            System.out.println(cell.getStringCellValue());
            break;
          case Cell.CELL_TYPE_NUMERIC:
            System.out.println(cell.getNumericCellValue());
            break;
          // 其他数据类型
        }
      }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分