POI导出Excel详细教程

article/2025/9/30 11:16:37

文章目录

  • 前言
  • 一、引入jar包依赖
  • 二、创建自定义导出Excel样式类
  • 三、创建核心导出工具类
  • 四、创建导出对象实体Bean
  • 五、具体使用案例
    • 5.1.创建SQL脚本和初始化数据
    • 5.2.写一个查询所有学生信息接口
    • 5.3.查询学生基本信息返回数据格式
    • 5.4.导出Excel方法
    • 5.5.通过页面导出按钮导出Excel
  • 六、导出展示

前言

本文项目地址demo:https://download.csdn.net/download/erpenggg/13210313

在一般的生产管理系统都会将数据通过页面导出到Excel,这里以Java为例通过第三方开源poi进行对Excel的操作,具体操作如下

一、引入jar包依赖

<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version>
</dependency>

二、创建自定义导出Excel样式类

package com.sunny.spring.boot.poi.common;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
/*** @ClassName: ExcelExportMyStylerImpl* @Description: 自定义报表导出样式,可以修改表头颜色,高度等* @Author: sunt* @Date: 2019/8/29 21:39* @Version 1.0**/
public class ExcelExportMyStylerImpl extends AbstractExcelExportStyler implements IExcelExportStyler {public ExcelExportMyStylerImpl(Workbook workbook) {super.createStyles(workbook);}@Overridepublic CellStyle getTitleStyle(short color) {CellStyle titleStyle = workbook.createCellStyle();Font font = workbook.createFont();font.setBold(true);// 加粗titleStyle.setFont(font);titleStyle.setAlignment(HorizontalAlignment.CENTER);// 居中titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中titleStyle.setFillForegroundColor(IndexedColors.AQUA.index);// 设置颜色titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);titleStyle.setBorderRight(BorderStyle.THIN);titleStyle.setWrapText(true);return titleStyle;}@SuppressWarnings("deprecation")@Overridepublic CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {CellStyle style = workbook.createCellStyle();style.setAlignment(CellStyle.ALIGN_CENTER);style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);style.setDataFormat(STRING_FORMAT);if (isWarp) {style.setWrapText(true);}return style;}@Overridepublic CellStyle getHeaderStyle(short color) {CellStyle titleStyle = workbook.createCellStyle();Font font = workbook.createFont();font.setBold(true);// 加粗font.setColor(IndexedColors.RED.index);font.setFontHeightInPoints((short) 11);titleStyle.setFont(font);titleStyle.setAlignment(HorizontalAlignment.CENTER);// 居中titleStyle.setFillForegroundColor(IndexedColors.WHITE.index);// 设置颜色titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);titleStyle.setBorderRight(BorderStyle.THIN);titleStyle.setWrapText(true);return titleStyle;}@SuppressWarnings("deprecation")@Overridepublic CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {CellStyle style = workbook.createCellStyle();style.setAlignment(CellStyle.ALIGN_CENTER);style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);style.setDataFormat(STRING_FORMAT);if (isWarp) {style.setWrapText(true);}return style;}
}

三、创建核心导出工具类

(注:该类只需要传递导出的Excel的数据集合、导出对象实体Bean(具体下面详细说明)、表头名称、sheet名称)

package com.sunny.spring.boot.poi.util;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.sunny.spring.boot.poi.common.ExcelExportMyStylerImpl;
import com.sunny.spring.boot.poi.pojo.StudentInfoBean;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Workbook;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;/*** @ClassName: ExcelExportUtil* @Description: Exceld导出工具类* @Author: sunt* @Date: 2019/8/30 14:49* @Version 1.0**/
public class MyExcelExportUtil {/*** Excel文件导出,导出的文件名默认为:headTitle+当前系统时间* @param listData 要导出的list数据* @param pojoClass 定义excel属性信息* @param headTitle Excel文件头信息* @param sheetName Excel文件sheet名称* @param response*/public static void exportExcel(Collection<?> listData,Class<?> pojoClass, String headTitle, String sheetName, HttpServletResponse response) {ExportParams params = new ExportParams(headTitle, sheetName);params.setHeight((short) 8);params.setStyle(ExcelExportMyStylerImpl.class);try {Workbook workbook = ExcelExportUtil.exportExcel(params, pojoClass, listData);String fileName = headTitle + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());fileName = URLEncoder.encode(fileName, "UTF8");response.setContentType("application/vnd.ms-excel;chartset=utf-8");response.setHeader("Content-Disposition", "attachment;filename="+fileName + ".xls");ServletOutputStream out=response.getOutputStream();workbook.write(out);out.flush();out.close();} catch (Exception e) {e.printStackTrace();}}
}

四、创建导出对象实体Bean

该对象主要作用指定导出到Excel列名称、宽度、列排序等信息,先贴代码吗,这里以学生基本信息为案例说明

package com.sunny.spring.boot.poi.pojo;import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;import java.io.Serializable;
import java.math.BigDecimal;/*** <p>* 学生基本信息表* </p>** @author sunt* @since 2019-08-29*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("T_STUDENT")
public class StudentInfoBean implements Serializable {private static final long serialVersionUID = 1L;/*** 学号*/@TableId("ID")@Excel(name = "学号", width = 20, orderNum = "1")private String id;/*** 姓名*/@TableField("NAME")@Excel(name = "姓名", width = 20, orderNum = "2")private String name;/*** 性别(1:男 2:女)* replace:导出是{a_id,b_id} 导入反过来,注意大括号里面单独引号引起来的*/@TableField("SEX")@Excel(name = "性别", width = 20, replace = { "男_1", "女_2" },orderNum = "3")private String sex;/*** 年龄*/@TableField("AGE")@Excel(name = "年龄", width = 20, orderNum = "4")private Integer age;/*** 出生日期*/@TableField("BIRTHDAY")@Excel(name = "出生日期", width = 20, orderNum = "5")private String birthday;/*** 入学时间*/@TableField("REGIST_DATE")@Excel(name = "入学时间",width = 20,orderNum = "6")private String registDate;/*** 学费*/@TableField("FEE")@Excel(name = "学费", width = 20, orderNum = "7")private BigDecimal fee;}

在这里插入图片描述

五、具体使用案例

这里我们点击页面导出按钮将数据库信息查询出来导出到Excel

5.1.创建SQL脚本和初始化数据

CREATE TABLE `t_student` (`ID` varchar(20) NOT NULL COMMENT '学号',`NAME` varchar(20) NOT NULL COMMENT '姓名',`SEX` char(1) NOT NULL COMMENT '性别(1:男 2:女)',`AGE` int(3) NOT NULL COMMENT '年龄',`BIRTHDAY` datetime NOT NULL COMMENT '出生日期',`REGIST_DATE` datetime NOT NULL COMMENT '入学时间',`FEE` decimal(5,2) NOT NULL COMMENT '学费',PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生基本信息表';
INSERT INTO `study`.`t_student` (`ID`, `NAME`, `SEX`, `AGE`, `BIRTHDAY`, `REGIST_DATE`, `FEE`) VALUES ('1', '张三', '1', '18', '2019-08-29 05:57:02', '2019-08-29 18:00:00', '199.12');
INSERT INTO `study`.`t_student` (`ID`, `NAME`, `SEX`, `AGE`, `BIRTHDAY`, `REGIST_DATE`, `FEE`) VALUES ('2', '小红', '2', '16', '2019-08-29 19:03:03', '2019-08-29 00:00:00', '226.55');

5.2.写一个查询所有学生信息接口

这里不做限制,以自己项目所使用的技术实现查询信息即可,这里只贴出接口代码,具体实现按自己的业务场景进行实现

package com.sunny.spring.boot.poi.service;import com.sunny.spring.boot.poi.pojo.StudentInfoBean;import java.util.List;/*** @ClassName: IStudentService* @Description: 学生基本信息接口* @Author: sunt* @Date: 2019/8/30 14:56* @Version 1.0**/
public interface IStudentService {/*** 查询所有学生* @return*/List<StudentInfoBean> queryAllStudent();
}

5.3.查询学生基本信息返回数据格式

[{"id": "1","name": "张三","sex": "1","age": 18,"birthday": "2019-08-29 05:57:02","registDate": "2019-08-29 18:00:00","fee": 199.12},{"id": "2","name": "小红","sex": "2","age": 16,"birthday": "2019-08-29 19:03:03","registDate": "2019-08-29 00:00:00","fee": 226.55}
]

5.4.导出Excel方法

其实这里是最核心也是最简单的地方,只需要调用上一步查询所有学生基本信息的接口获取到数据然后再调用导出Excel工具类即可,具体实现如下

package com.sunny.spring.boot.poi.controller;import com.sunny.spring.boot.poi.pojo.StudentInfoBean;
import com.sunny.spring.boot.poi.service.IStudentService;
import com.sunny.spring.boot.poi.util.MyExcelExportUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.List;/*** @ClassName: StudentController* @Description: Excel导出测试* @Author: sunt* @Date: 2019/8/30 14:59* @Version 1.0**/
@Controller
@RequestMapping("/export")
public class ExcelExportController {@Autowired(required = false)private IStudentService studentService;@RequestMapping("/exportStudent")public void exportStudent(HttpServletResponse response) {try {List<StudentInfoBean> sutdentList = studentService.queryAllStudent();MyExcelExportUtil.exportExcel(sutdentList,StudentInfoBean.class,"学生基本信息","新生入学信息",response);} catch (Exception e) {e.printStackTrace();}}
}

5.5.通过页面导出按钮导出Excel

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>layui</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" href="layui\css\layui.css" media="all"><!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>
<form action="/export/exportStudent"><fieldset class="layui-elem-field site-demo-button" style="margin-top: 30px;"><legend>Excel导入导出</legend><div><button class="layui-btn" lay-submit="" lay-filter="studentForm">导出学生基本信息</button></div></fieldset>
</form>
</body>
</html>

六、导出展示

在这里插入图片描述


http://chatgpt.dhexx.cn/article/TlhULC7D.shtml

相关文章

Java使用POI导出Excel文件

Java使用POI导出Excel文件 POI概述Apache POI 下载依赖引用关系图如下所示:直接下载Maven下载 POI实例总结 POI概述 HSSF 是 POI 项目的 Excel 97(-2007) 文件格式的纯 Java 实现。XSSF 是 POI 项目的 Excel 2007 OOXML (.xlsx) 文件格式的纯 Java 实现。 HSSF 和 XSSF 提供了读…

Java用POI导出Excel表格中的数据

poi操作Excel 主要通过HSSF,XSSF两种方式。 HSSF只能解析.xls格式的excel文件&#xff0c;XSSF支持.xls与.xlsx两种格式。 功能&#xff1a; 传递一个Excel文件&#xff0c;拿到里面所有的数据&#xff0c;返回一个集合。 Excel中的数据是什么类型&#xff0c;就返回什么类型的…

springboot+poi导出excel

在web开发中经常遇到将数据写入excel并导出的需求&#xff0c;下面整理springbootpoi实现导出excel的实例。 搭建springboot工程&#xff0c;引入依赖&#xff0c;细节不在赘述。 引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId…

POI实现导入导出excel

poi在日常的导入导出中是比较常用到的&#xff0c;最近也总结了下接触到的poi相关的导入导出的一些代码&#xff0c;有问题可以指出&#xff1a; package com.poi;import km.org.apache.poi.hssf.usermodel.*; import km.org.apache.poi.hssf.util.HSSFColor; import km.org.a…

java使用Poi导出excel表格

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) 在之前的一篇文章java操作Excel实战干货中展示了使用poi库读取excel表格的的用法&#xff0c;今天演示另一个常用功能&#xff0c;将数据导出到excel中&#xff…

POI导出Excel文件中文乱码

使用POI组件生产Excel文件时中文乱码&#xff0c;总结后可能错误原因如下&#xff1a; 后台导出Excel文件格式混乱 POI组件可生成.xls和.xlsx两种格式的Excel文件&#xff0c;设置文件格式时应注意与导出的格式相匹配。如果文件格式设置出错&#xff0c;则会出现以下错误&…

Java使用poi导出Excel之格式设置

最近接到一个需求&#xff0c;客户不满意原本导出的csv文件&#xff0c;想要导出Excel文件。不就导出Excel文件嘛&#xff0c;小意思&#xff0c;于是乎信心满满从网上扒导出的代码&#xff0c;一顿CV大法&#xff0c;搞定&#xff01;代码如下: import lombok.extern.slf4j.S…

Java使用POI导出Excel

目录 一、前景二、概念2.1. 简介2.2.Excel版本和相关对象2.3.WorkBook2.4.POI依赖 三、POI - 写3.1.代码示例3.2. 性能对比3.3. 测试rowAccessWindowSize3.4. 导出Excel样式设置 四、POI - 读4.1.代码示例4.2.读取不同的数据类型4.3.读取公式 五、POI - 遇到的坑5.1.为什么模板…

Java实现八大排序算法

原文链接&#xff1a; 八大排序算法总结与java实现 - iTimeTraveler 概述 因为健忘&#xff0c;加上对各种排序算法理解不深刻&#xff0c;过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结&#xff0c;强行学习。首先罗列一下常见的十大排序算法&…

通过java实现八大排序的功能

八大排序(java实现) 常见的排序算法如下&#xff1a; 直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序 它们都属于内部排序&#xff0c;也就是只考虑数据量较小仅需要使用内存的排序算法&#xff0c;他们之间关系如下&#xff1a; 稳定与非稳定 …

c语言基数为3变为基数为10,必须知道的C语言八大排序算法(收藏)

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用时…

数据结构( 排序)

排序 1、排序的基本概念2、插入排序①.直接插入排序②.折半插入排序③.希尔排序 3、交换排序①.冒泡排序②.快速排序 4、选择排序①.简单选择排序②.树形选择排序③.堆排序 5、归并排序6、基数排序7、总结8、例题与应用 1、排序的基本概念 排序是计算机内经常进行的一种操作&a…

十大经典排序算法python版本_【程序员面试必备】动画详解十大经典排序算法(C语言版)...

欢迎访问我的博客原文 排序算法是程序员必备的基础知识&#xff0c;弄明白它们的原理和实现很有必要。本文中将通过非常细节的动画展示出算法的原理&#xff0c;配合代码更容易理解。 概述 由于待排序的元素数量不同&#xff0c;使得排序过程中涉及的存储器不同&#xff0c;可将…

八大排序算法详解(Java语言实现)

概述 因为健忘&#xff0c;加上对各种排序算法理解不深刻&#xff0c;过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结&#xff0c;强行学习。首先罗列一下常见的十大排序算法&#xff1a; 直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归…

九大排序算法-C语言实现及详解

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用…

常用的排序算法-C语言

目录 冒泡排序   鸡尾酒排序  选择排序插入排序 二分插入排序  希尔排序  归并排序堆排序快速排序 我们通常所说的排序算法往往指的是内部排序算法&#xff0c;即数据记录在内存中进行排序。 排序算法大体可分为两种&#xff1a; 一种是比较排序&#xff0c;时间复杂度…

九大排序算法详解 - C语言篇

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用时…

数据结构排序算法总结

学完数据结构已经有好长一段时间了&#xff0c;最近又重新回顾&#xff0c;做一个八大排序的总结&#xff0c;以便后期回顾。 目录 一、插入排序 1.直接插入排序 2.希尔排序 二、交换排序 1.冒泡排序 2.快速排序 三、选择排序 1.简单选择排序 2.堆排序 四、归并排序 …

程序员面试必备——动画详解十大经典排序算法(C语言版)

博客原文地址 排序算法是程序员必备的基础知识&#xff0c;弄明白它们的原理和实现很有必要。本文中将通过非常细节的动画展示出算法的原理&#xff0c;配合代码更容易理解。 概述 由于待排序的元素数量不同&#xff0c;使得排序过程中涉及的存储器不同&#xff0c;可将排序方…

【C语言八大排序思想及代码实现】

文章目录 系列文章目录前言一、冒泡排序二、选择排序三、直接插入排序四、希尔排序五、归并排序六、基数&#xff08;桶&#xff09;排序七、堆排序八、快速排序总结 一、冒泡排序 思想&#xff1a; 从第一个数开始依次向后进行比较&#xff08;第一个和第二个比较然后第二个…