java poi操作excel

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

  • 你看下这篇博客吧, 应该有用👉 :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中的相关代码并不适用于本题。