ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文搞定POI,再也不怕excel导入导出了 [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2024-5-13 17:29
标题: 一文搞定POI,再也不怕excel导入导出了
写在前面

在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求。
通过使用相干的Java库,如Apache POI、EasyPoi或EasyExcel,可以轻松地实现Excel文件的读写操作。
而这篇文章将介绍如何在Java中使用Apache POI、EasyPoi 和EasyExcel库来举行Excel文件的导入和导出操作,资助您快速掌握这一实用的技能。
一、使用场景

下面是excel导入导出的几个最常用的使用场景。
企业管理系统:企业管理系统通常必要导入员工信息、客户信息、销售数据等大量数据到系统中,以及导出报表、数据分析结果等信息。
学校教务系统:学校教务系统大概必要导入门生信息、课程表、成绩等数据,以及导出门生成绩单、教师工资表等信息。
电子商务平台:电子商务平台必要导入商品信息、订单数据等内容,以及导出销售报表、库存清单等信息,方便管理和分析。
人力资源管理系统:人力资源管理系统必要导入员工档案、薪资信息等数据,以及导出薪资条、考勤报表等信息,方便人力资源管理和工资结算。
医院信息系统:医院信息系统大概必要导入患者信息、医疗记录等数据,以及导出医疗报告、统计分析等信息,方便医护人员举行医疗服务和管理。
以上仅是一些常见的使用场景,实际上各种系统中的Excel导入导出功能可以根据详细需求举行定制和扩展
二、三个库简介

1、Apache POI

Apache POI是一个流行的Java库,用于处理Microsoft Office格式文件,包括Excel、Word和PowerPoint。它提供了丰富的API,可以创建、读取和修改各种类型的Office文档。
官网https://poi.apache.org/
优点:
缺点:
2、EasyPoi

easypoi功能如同名字easy,主打的功能就是轻易,让一个没见打仗过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法
官网: https://gitee.com/lemur/easypoi
优点:
缺点:
3、EasyExcel

EasyExcel是一个阿里巴巴基于Apache POI封装的开源框架,专注于Excel文件的读写操作。它提供了简洁易用的API,简化了Excel处理的流程。
官网https://easyexcel.opensource.alibaba.com/
优点:
缺点:

三 、各版本Excel 区别

不同版本的Excel在功能和格式上大概会有一些差异。以是后续在处理不同版本的excel时,会有少许不同
以下是一些常见的Excel版本之间的区别
1、Excel 97-2003(.xls)

2、Excel 2007及以上版本(.xlsx)

四 、Excel 根本结构介绍

Java是面向对象的操作语言,万物皆对象。相识了Excel根本结构有助于我们将Excel与Java中对象关联起来


五、Apache POI根本操作

由于Excel分为03版本和07版本,以是我们在使用的时候必要
注:
其他操作根本是一样的,相识这个之后,后续操作就很简单了~
5.1 根本写操作

5.1.1  03版本写excel

① 引入依靠
  1. <dependency>
  2.     <groupId>org.apache.poi</groupId>
  3.     <artifactId>poi</artifactId>
  4.     <version>4.1.2</version>
  5. </dependency>
  6. <dependency>
  7.      <groupId>junit</groupId>
  8.      <artifactId>junit</artifactId>
  9.      <version>4.13.2</version>
  10.      <scope>test</scope>
  11. </dependency>
  12. <dependency>
  13.     <groupId>joda-time</groupId>
  14.     <artifactId>joda-time</artifactId>
  15.     <version>2.10.10</version>
  16. </dependency>
复制代码
②实例代码
  1. public class AppTest
  2. {
  3.     String filepath="E:\\xiezhrspace\\excel-demo\\fileoutput\";
  4.     @Test
  5.     public void poiexcel03Test() throws  Exception{
  6.         //1、创建一个工作簿
  7.         Workbook workbook = new HSSFWorkbook();
  8.         //2、创建一个工作表
  9.         Sheet sheet = workbook.createSheet("第一个工作表");
  10.         //3、创建一行
  11.         //3.1 创建第一行
  12.         Row row1 = sheet.createRow(0);
  13.         //3.2 创建第二行
  14.         Row row2 = sheet.createRow(1);
  15.         //3.3 创建第三行
  16.         Row row3 = sheet.createRow(2);
  17.         //4 创建一个单元格
  18.         //4.1 创建第一行第一个单元格
  19.         Cell cell11 = row1.createCell(0);
  20.         //4.2 创建第一行第二个单元格
  21.         Cell cell12 = row1.createCell(1);
  22.         //4.3 创建第二行第一个单元格
  23.         Cell cell21 = row2.createCell(0);
  24.         //4.4 创建第二行第二个单元格
  25.         Cell cell22 = row2.createCell(1);
  26.         //4.5 创建第三行第一个单元格
  27.         Cell cell31 = row3.createCell(0);
  28.         //4.6 创建第三行第二个单元格
  29.         Cell cell32 = row3.createCell(1);
  30.         // 5 设置单元格的值
  31.         //5.1 设置第一行第一个单元格
  32.         cell11.setCellValue("个人公众号");
  33.         //5.2 设置第一行第二个单元格
  34.         cell12.setCellValue("XiezhrSpace");
  35.         //5.3 设置第二行第一个单元格
  36.         cell21.setCellValue("个人博客");
  37.         //5.4 设置第二行第二个单元格
  38.         cell22.setCellValue("www.xiezhr.cn");
  39.         //5.5 设置第三行第一个单元格
  40.         cell31.setCellValue("当前时间");
  41.         //5.6 设置第三行第二个单元格
  42.         String curdate = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
  43.         cell32.setCellValue(curdate);
  44.         FileOutputStream fileOutputStream = new FileOutputStream(filepath + "poiexcel03.xls");
  45.         workbook.write(fileOutputStream);
  46.         fileOutputStream.close();
  47.         workbook.close();
  48.     }
  49. }
复制代码
③ excel写出结果

5.1.2  07版本写excel

07 版本依靠与处理03版本的有点不一样,代码根本上稳定
① 所需依靠
  1. <dependency>
  2.     <groupId>org.apache.poi</groupId>
  3.     <artifactId>poi-ooxml</artifactId>
  4.     <version>4.1.2</version>
  5. </dependency>
复制代码
② 代码修改
07版本操作与03版本操作根本没什么变化,我们只需将03版本代码中new HSSFWorkbook() 修改成new XSSFWorkbook()
new FileOutputStream(filepath + "poiexcel03.xls") 修改成new FileOutputStream(filepath + "poiexcel07.xlsx") 即可
  1. Workbook workbook = new XSSFWorkbook();
  2. ...省略
  3. FileOutputStream fileOutputStream = new FileOutputStream(filepath + "poiexcel07.xlsx");
复制代码
③ 最终结果

5.1.3  03版本批量写excel

①代码
  1. @Test
  2.     public void testBigDateExcelTest() throws Exception {
  3.         Workbook workbook = new HSSFWorkbook();
  4.         Sheet sheet = workbook.createSheet("大文件导出测试");
  5.         long begin = System.currentTimeMillis();
  6.         for (int rowNum = 0; rowNum <65536 ; rowNum++) {
  7.             Row row = sheet.createRow(rowNum);
  8.             for (int cellNum = 0; cellNum < 10 ; cellNum++) {
  9.                 Cell cell = row.createCell(cellNum);
  10.                 cell.setCellValue("("+(rowNum+1) + "," + (cellNum+1)+")");
  11.             }
  12.         }
  13.         FileOutputStream fileOutputStream = new FileOutputStream(filepath + "03版本批量写入.xls");
  14.         workbook.write(fileOutputStream);
  15.         fileOutputStream.close();
  16.         workbook.close();
  17.         long end = System.currentTimeMillis();
  18.         System.out.println("耗时:"+(double)(end-begin)/1000+"秒");
  19.     }
复制代码
④ 添补数据
  1. Workbook workbook = new XSSFWorkbook();
  2. ...省略
  3. FileOutputStream fileOutputStream = new FileOutputStream(filepath + "07版本批量写入.xlsx");
复制代码
⑤ 最终结果

8.4.3 复杂添补

当excel模板相对复杂时,也可以添补
① 预备复杂模板

② 预备添补对象
参照8.4.1末节
③预备数据
参照8.4.1末节
④添补数据
  1. @Test
  2.     public void batchWriteExcel07optTest() throws Exception {
  3.         Workbook workbook = new SXSSFWorkbook();
  4.         Sheet sheet = workbook.createSheet("大文件导出优化测试");
  5.         long begin = System.currentTimeMillis();
  6.         for (int rowNum = 0; rowNum <65536 ; rowNum++) {
  7.             Row row = sheet.createRow(rowNum);
  8.             for (int cellNum = 0; cellNum < 10 ; cellNum++) {
  9.                 Cell cell = row.createCell(cellNum);
  10.                 cell.setCellValue("("+(rowNum+1) + "," + (cellNum+1)+")");
  11.             }
  12.         }
  13.         FileOutputStream fileOutputStream = new FileOutputStream(filepath + "07版本批量写入优化.xlsx");
  14.         workbook.write(fileOutputStream);
  15.         // 清理临时文件
  16.         ((SXSSFWorkbook) workbook).dispose();
  17.         fileOutputStream.close();
  18.         workbook.close();
  19.         long end = System.currentTimeMillis();
  20.         System.out.println("耗时:"+(double)(end-begin)/1000+"秒");
  21.     }
复制代码
⑤ 最终结果

九、文章末节

文中只例举出excel 常用操作,如果这些还不满足你的需求,大家可以查看官方文档。
官方文档还黑白常详细的,并且都给出了详细的demo。
另外文中例举出的代码已提交到https://gitee.com/xiezhr/excel-demo.git  接待大家访问查看
本期内容到此就结束了,希望对你有所资助,我们下期再见 (●'◡'●)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4