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

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.mrgr.cn/news/78140.html

相关文章:

  • mysql基本查询使用
  • 优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
  • easyui combobox 只能选择第一个问题解决
  • 详解Qt之QtMath Qt数学类
  • Zustand:一个轻量级的React状态管理库
  • 无锁编程–C语言
  • 【Google Cloud】Private Service Connect 托管式服务
  • Redis常见面试题总结(上)
  • JS小模块练习
  • CSS笔记(一)炉石传说卡牌设计1
  • HTML详解(1)
  • 七、Kubernetes持久化存储-Volume-emptyDir-HostPath-NFS
  • PyTorch基础4
  • C语言-数学基础问题
  • 【Java】二叉树:数据海洋中灯塔式结构探秘(上)
  • Oracle 数据库 IDENTITY 列
  • ArcGIS应用指南:ArcGIS制作局部放大地图
  • PostGres命令【常用维护,增删改查】
  • 五种创建k8s的configMap的方式及configmap使用
  • JavaScript核心语法(1)
  • oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist
  • 卷积神经网络学习记录
  • WPF中如何让Textbox显示为一条直线
  • Selenium 包介绍
  • 高标准农田智慧农业系统建设方案
  • React-useEffect的使用