qq_38953879 2023-06-25 16:43 采纳率: 0%
浏览 8

java poi操作excel

现在有excel1,excel2,excelall表格, 把excel1中a2的值和excel2中a2的值累加,然后放到excelall的a2中,需要动态获取数据,怎么做,请给思路

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-25 19:03
    关注
    • 你看下这篇博客吧, 应该有用👉 :Java利用POI生成Excel宽度高度、字体强制换行、边框、字体设置等样式控制
    • 除此之外, 这篇博客: JAVA POI读取带有多张图片的excel时发生的问题中的 业务场景:读取excel数据,该excel中每行都会有图片,各个图片可以重复,现在需要拿到每行对应的图片。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 测试用excel,如图可见有两个一样的图片,但是其实是复制的两个不同文件:图片说明

      poi获取图片我所知道的只有一个方法,为了测试我输出图片到了本地:图片说明

      打印出的结果:
      图片说明
      明明excel中有三张图片,却只打印了两张,输出到本地的图片也确实是去过重的两张。无论是改文件名还是怎么样,那两张图片永远都被视为一张。

      不死心的我又拿到了他单元格的数据,单元格类型为FORMULA,但确实是三张图片:
      在这里插入图片描述
      那就奇怪了,三个单元格三张图片,怎么使用getAllPictrues方法,就只能拿到两张呢???于是,我去翻了下源码。

      可以看到,这个方法获取图片的方式,是用正则表达式去匹配一个类似路径的东西,那么图片被去重应该是因为路径一样。
      在这里插入图片描述
      继续顺藤摸瓜找到这个神秘字符串"/xl/media/"出现的位置,在一番搜索后发现了端倪:
      在这里插入图片描述
      红线圈出来的,就是被封装为FakeZipEntry的图片了,也就是说,在这个时候,图片就已经被去重了!

      之后探索的过程发现,之所以POI能读取excel中的图片,其原理是基于java.util.zip的压缩文件读取功能,如果你去把excel文件的后缀强转为.zip的话,再去解压缩,就会发现xl/media的文件夹,然后图片其实在excel中就已经被去重了,所以这个问题是个无解的问题!

    • 以下回答由chatgpt基于相关博客总结生成:

      思路和操作步骤:

      1. 导入Java Poi相关类库,创建ExcelAll的工作簿对象和ExcelSheet对象。

      2. 读取Excel1和Excel2中的名为A2的数据单元格,并将这两个单元格中的数值相加。

      示例代码:

      // 读取Excel1
      XSSFWorkbook workbook1 = new XSSFWorkbook(new FileInputStream(new File("path/to/Excel1")));
      XSSFSheet sheet1 = workbook1.getSheetAt(0);
      XSSFRow row1 = sheet1.getRow(1);
      XSSFCell cell1 = row1.getCell(0);
      double value1 = cell1.getNumericCellValue();
      
      // 读取Excel2
      XSSFWorkbook workbook2 = new XSSFWorkbook(new FileInputStream(new File("path/to/Excel2")));
      XSSFSheet sheet2 = workbook2.getSheetAt(0);
      XSSFRow row2 = sheet2.getRow(1);
      XSSFCell cell2 = row2.getCell(0);
      double value2 = cell2.getNumericCellValue();
      
      // 计算结果
      double result = value1 + value2;
      
      1. 将计算结果写入ExcelAll的A2单元格中。

      示例代码:

      XSSFWorkbook workbookAll = new XSSFWorkbook(new FileInputStream(new File("path/to/ExcelAll")));
      XSSFSheet sheetAll = workbookAll.getSheetAt(0);
      XSSFRow rowAll = sheetAll.getRow(1);
      XSSFCell cellAll = rowAll.getCell(0);
      cellAll.setCellValue(result);
      
      // 保存修改后的ExcelAll
      FileOutputStream fileOutputStream = new FileOutputStream("path/to/ExcelAll");
      workbookAll.write(fileOutputStream);
      fileOutputStream.close();
      

      注:以上示例代码是基于XSSFWorkbook的,如果使用HSSFWorkbook,只需要将XSSFWorkbook改为HSSFWorkbook即可。

      参考资料中的段落0和段落1中提供了一些操作Excel单元格样式的代码示例,可根据需要进行调整。由于题目中并没有提到需要添加下拉框限制的需求,故段落2中的相关代码并不适用于本题。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月25日

悬赏问题

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