一文搞定POI,再也不怕excel导入导出了 您所在的位置:网站首页 练字的基本步骤口诀 一文搞定POI,再也不怕excel导入导出了

一文搞定POI,再也不怕excel导入导出了

2024-06-25 09:59| 来源: 网络整理| 查看: 265

一文搞定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/

优点:

功能强大:支持处理复杂的Excel文件,包括单元格、样式、图表等内容。

稳定性高:作为一个成熟的开源项目,得到广泛支持和持续维护。

灵活性:可以满足各种定制化需求,可以实现复杂的Excel处理功能。

缺点:

学习曲线较陡:对于初学者来说,学习成本可能较高。 性能相对较低:在处理大量数据时,性能可能受到一定影响。 2、EasyPoi

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法

官网: https://gitee.com/lemur/easypoi

优点:

简单易用:EasyPoi 提供了简洁的 API 接口,使得 Excel 操作更加便捷。 功能丰富:支持 Excel 文件的导入导出、模板导出、校验等多种功能。 易于扩展:EasyPoi 基于 Apache POI 和 JexcelApi,可以方便地扩展和定制功能。 文档齐全:EasyPoi 提供了详细的文档和示例,便于开发人员学习和使用。

缺点:

功能有限:相比于 Apache POI,EasyPoi 可能在一些高级功能上有所限制。 可能存在性能问题:由于封装层的存在,EasyPoi 在处理大量数据时可能存在一定的性能损耗。 3、EasyExcel

EasyExcel是一个阿里巴巴基于Apache POI封装的开源框架,专注于Excel文件的读写操作。它提供了简洁易用的API,简化了Excel处理的流程。

官网:https://easyexcel.opensource.alibaba.com/

优点:

简单易用:提供了简洁的API,使用起来非常方便。 高性能:在处理大量数据时具有较高的性能,能够快速导入导出Excel文件。 支持注解:支持使用注解配置Excel文件的导入导出规则,简化了开发过程。

缺点:

功能相对有限:相比Apache POI,功能相对简单,可能无法满足某些复杂的Excel处理需求。 定制化能力较弱:定制化能力不如Apache POI灵活。

POI和EasyExcel区别

三 、各版本Excel 区别

不同版本的Excel在功能和格式上可能会有一些差异。所以后续在处理不同版本的excel时,会有少许不同

以下是一些常见的Excel版本之间的区别

1、Excel 97-2003(.xls) 最大行数为65536行,最大列数为256列。 支持的最大单元格格式有限。 不支持新的Excel特性,如条件格式、表格样式等。 文件大小限制为2GB。 2、Excel 2007及以上版本(.xlsx) 最大行数和列数均有较大提升,支持数百万行数和16384列。 支持更多的单元格格式和样式。 引入了新的功能,如条件格式、表格样式、数据透视表等。 支持更多的图表类型和图表样式。 文件大小限制较大,最多可达16,384 x 1,048,576个单元格。 四 、Excel 基本结构介绍

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

工作簿(Workbook): Excel文件以工作簿的形式存在,一个工作簿可以包含多个工作表(Sheet) 工作表(Sheet): 每个工作表由行(Row)和列(Column)组成,交叉形成单元格(Cell),用于存储数据、文本、公式等内容 单元格(Cell): Excel中的最小单位,用于存储数据或公式。每个单元格有一个唯一的地址,例如A1、B2等 行(Row)和列(Column): 行是水平方向的一组单元格,列是垂直方向的一组单元格。行用数字标识,列用字母标识 公式(Formula): Excel支持使用公式进行计算和数据处理。公式以等号(=)开头,可以引用其他单元格的数值或内容进行运算 函数(Function): Excel提供了大量的内置函数,用于进行各种复杂的计算和数据处理,如SUM(求和)、AVERAGE(平均值)、VLOOKUP(垂直查找)

Excel基本结构

五、Apache POI基本操作

由于Excel分为03版本和07版本,所以我们在使用的时候需要

注:

处理03版本excel时,主要使用HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell等对象来操作Excel文件;

处理07版本及之后版本excel时,主要使用XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell等对象来操作Excel文件

其他操作基本是一样的,了解这个之后,后续操作就很简单了~

5.1 基本写操作 5.1.1 03版本写excel

① 引入依赖

org.apache.poi poi 4.1.2 junit junit 4.13.2 test joda-time joda-time 2.10.10

②实例代码

public class AppTest { String filepath="E:\\xiezhrspace\\excel-demo\\fileoutput\\"; @Test public void poiexcel03Test() throws Exception{ //1、创建一个工作簿 Workbook workbook = new HSSFWorkbook(); //2、创建一个工作表 Sheet sheet = workbook.createSheet("第一个工作表"); //3、创建一行 //3.1 创建第一行 Row row1 = sheet.createRow(0); //3.2 创建第二行 Row row2 = sheet.createRow(1); //3.3 创建第三行 Row row3 = sheet.createRow(2); //4 创建一个单元格 //4.1 创建第一行第一个单元格 Cell cell11 = row1.createCell(0); //4.2 创建第一行第二个单元格 Cell cell12 = row1.createCell(1); //4.3 创建第二行第一个单元格 Cell cell21 = row2.createCell(0); //4.4 创建第二行第二个单元格 Cell cell22 = row2.createCell(1); //4.5 创建第三行第一个单元格 Cell cell31 = row3.createCell(0); //4.6 创建第三行第二个单元格 Cell cell32 = row3.createCell(1); // 5 设置单元格的值 //5.1 设置第一行第一个单元格 cell11.setCellValue("个人公众号"); //5.2 设置第一行第二个单元格 cell12.setCellValue("XiezhrSpace"); //5.3 设置第二行第一个单元格 cell21.setCellValue("个人博客"); //5.4 设置第二行第二个单元格 cell22.setCellValue("www.xiezhr.cn"); //5.5 设置第三行第一个单元格 cell31.setCellValue("当前时间"); //5.6 设置第三行第二个单元格 String curdate = new DateTime().toString("yyyy-MM-dd HH:mm:ss"); cell32.setCellValue(curdate); FileOutputStream fileOutputStream = new FileOutputStream(filepath + "poiexcel03.xls"); workbook.write(fileOutputStream); fileOutputStream.close(); workbook.close(); } }

③ excel写出效果

image-20240303162520227

5.1.2 07版本写excel

07 版本依赖与处理03版本的有点不一样,代码基本上不变

① 所需依赖

org.apache.poi poi-ooxml 4.1.2

② 代码修改

07版本操作与03版本操作基本没什么变化,我们只需将03版本代码中new HSSFWorkbook() 修改成new XSSFWorkbook()

new FileOutputStream(filepath + "poiexcel03.xls") 修改成new FileOutputStream(filepath + "poiexcel07.xlsx") 即可

Workbook workbook = new XSSFWorkbook(); ...省略 FileOutputStream fileOutputStream = new FileOutputStream(filepath + "poiexcel07.xlsx");

③ 最终效果

07版本操作

5.1.3 03版本批量写excel

①代码

@Test public void testBigDateExcelTest() throws Exception { Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("大文件导出测试"); long begin = System.currentTimeMillis(); for (int rowNum = 0; rowNum


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有