Springboot下导入导出excel
Spring Boot项目中实现 Excel 的导入导出功能,里推荐使用 Apache POI
和 EasyExcel
两个库。
Apache POI
是 Apache 软件基金会的开源函式库,功能全面强大,但是代码书写冗余繁杂,读写大文件耗费内存较大,容易 OOM
。
EasyExcel
是一个基于 Apache POI
开发的开源 Java 库,用于简化 Excel 文件的读写操作,可以把内存消耗从100M左右降低到10M以内,并且再大的 Excel 不会出现内存溢出。
1. Apache POI
Excel
是由四个元素组成的分别是:WorkBook(工作簿)
、Sheet(工作表)
、Row(行)
、Cell(单元格)
,一个 WorkBook
可以包含多个Sheet
,一个 Sheet
又是由多个 Row
组成,一个 Row
是由多个 Cell
组成。
1.1 引入Apache POI依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
1.2 用法
💗1.2.1 创建Excel的元素
创建WorkBook(工作簿)
、Sheet(工作表)
、Row(行)
、Cell(单元格)
1.2.1.1 创建 WokrBook
Workbook workbook = new XSSFWorkbook();
1.2.1.2 创建 Sheet
Sheet sheet = workbook.createSheet();
设置 sheet
的名称:
Sheet sheet = workbook.createSheet("sheet名称");
1.2.1.3 创建行 Row
Row row = sheet.createRow(0);
1.2.1.4 创建单元格 Cell
Cell cell = row.createCell(0, CellType.STRING);
可以指定单元格的类型,支持的类型有下面7种:
_NONE(-1),NUMERIC(0),STRING(1),//公式FORMULA(2),BLANK(3),//布尔BOOLEAN(4),ERROR(5);
1.2.1.5 填充数据
cell.setCellValue("苹果");
1.2.1.6 生成文件
workbook.write(new FileOutputStream(fileName));
💙1.2.2 样式和字体
如果我们需要导出的 Excel
美观一些,如设置字体的样式加粗、颜色、大小等等,就需要创建样式和字体。
创建样式:
CellStyle cellStyle = workbook.createCellStyle();
1.2.2.1 左右垂直居中
//左右居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
1.2.2.2 字体加粗、颜色
创建加粗样式并设置到 CellStyle
中:
Font font = workbook.createFont();
//字体颜色为红色
font.setColor(IndexedColors.RED.getIndex());
//字体加粗
font.setBold(true);
cellStyle.setFont(font);
指定 Cell
单元格使用该样式:
cell.setCellStyle(cellStyle);
1.2.2.3 调整列宽和高
Sheet sheet = workbook.createSheet();
//自动调整列的宽度来适应内容
sheet.autoSizeColumn(int column);
// 设置列的宽度
sheet.setColumnWidth(2, 20 * 256);
autoSizeColumn()
传递的参数就是要设置的列索引。setColumnWidth()
第一个参数是要设置的列索引,第二参数是具体的宽度值,宽度 = 字符个数 * 256
(例如20个字符的宽度就是20 * 256)
1.2.2.4 倾斜、下划线
Font font = workbook.createFont();
font.setItalic(true); //设置倾斜
font.setUnderline(U_SINGLE); //设置下划线
💚1.2.3 进阶用法
1.2.3.1 合并单元格
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));
CellRangeAddress()
方法四个参数分别是:
fristRow
:起始行lastRow
:结束行fristCol
:起始列lastCol
:结束列
如果你想合并从第一行到第二行从一列到第十列的单元格(一共合并20格),那么就是CellRangeAddress(0,1,0,9)
。
1.2.3.2 数据校验
//创建数据验证
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
//创建要添加校验的单元格对象
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 9);
//创建必填校验规则
DataValidationConstraint constraint = validationHelper.createCustomConstraint("NOT(ISBLANK(A1))");
//设置校验
DataValidation validation = dvHelper.createValidation(constraint, addressList);
//校验不通过 提示
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
1.2.3.3 公式
- SUM:求和函数
// 创建公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
// 创建计算单元格,填充计算公式,并计算SUM公式结果
Row sumRow = sheet.createRow(3);
Cell sumCell = sumRow.createCell(3);
sumCell.setCellFormula("SUM(D2:D3)");
sumCell.setCellValue(evaluator.evaluate(sumCell).getNumberValue());
- AVERAGE:平均数函数
// 创建公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
// 创建计算单元格,填充计算公式,并计算AVERAGE公式结果
Row avgRow = sheet.createRow(dataList.size());
Cell avgCell = avgRow.createCell(3);
avgCell.setCellFormula("AVERAGE(D2:D3)");
avgCell.setCellValue(evaluator.evaluate(avgCell).getNumberValue());
1.2.3.4 下拉选择
1.2.3.5 设置单元格的数据类型
- 数字格式
// 设置单元格样式 - 数字格式
CellStyle numberCellStyle = workbook.createCellStyle();
numberCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(numberCellStyle);
- 日期格式
// 设置单元格样式 - 日期格式
CellStyle dateCellStyle = workbook.createCellStyle();
dateCellStyle.setDataFormat(workbook.createDataFormat().getFormat("yyyy-MM-dd"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(dateCellStyle);
1.3 导出
在这里插入代码片
1.4 导出
2. EasyExcel
https://blog.csdn.net/qq_42785250/article/details/129654178
https://blog.51cto.com/u_16213334/11775590
https://www.jb51.net/program/32842874j.htm
https://zyqok.blog.csdn.net/article/details/121994504#comments_35231204