当前位置: 首页 > article >正文

Springboot下导入导出excel

Spring Boot项目中实现 Excel 的导入导出功能,里推荐使用 Apache POIEasyExcel 两个库。

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


http://www.kler.cn/a/410742.html

相关文章:

  • GitLab指定用户分配合并权限
  • Qt入门1——认识Qt的几个常用头文件和常用函数
  • 对比三种UI交互界面的方案
  • 移动端相关 BFC CSS原子化 ✅
  • WEB攻防-通用漏洞文件上传js验证mimeuser.ini语言特性
  • vue2中的this.$el,this.$parent,this.$children 在vue3中如何表示
  • 《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试
  • Redis 实现高性能计数器
  • STM32F103外部中断配置
  • Web3.0安全开发实践:Clarity最佳实践总结
  • Oracle 数据库 IDENTITY 列
  • [网络]无线通信中的AMPDU
  • java基础面试题七数据结构与集合源码
  • go语言闭包捕获的是变量的引用而不是变量的值
  • 【GoF23种设计模式】01_建造者模式
  • 40_U²-Net网络详解
  • 【shodan】(五)网段利用
  • 跨标签通信的几种方式
  • Sickos1.1 详细靶机思路 实操笔记
  • 【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能