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

字节数组在内存中转为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 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页