超级简单POI导出Excel实战
在一般的生产管理系统都会将数据通过页面导出到Excel,这里以Java为例通过第三方开源poi进行对Excel的操作,具体操作如下
1.引入jar包依赖
这里我以maven的方式引入jar包,具体依赖如下
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
2.创建自定义导出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);
} @Override
public 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")
@Override
public 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;
} @Override
public 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")
@Override
public 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;
}
}
3.创建核心导出工具类
(注:该类只需要传递导出的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();
}
}
}
4.创建导出对象实体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; }
属性字段 | 属性值 |
@TableField |
这个字段代表数据库表的字段 |
@Excel |
name代表导出Excel列名称 |
@Excel | orderNum代表Excel列排在第几列 |
@Excel | replace一般数据库存的性别例如0和1,导出的值0展示为男性,女展示为女性 |
’
5.具体使用案例
这里我们点击页面导出按钮将数据库信息查询出来导出到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 ('', '张三', '', '', '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 ('', '小红', '', '', '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>
6.导出展示
导出样式展示
7.源代码地址
https://gitee.com/SunnySVN/SpringBoot-Study.git 欢迎各位大佬路过点个Star
注:poi多个sheet的导出以及合并单元格的方式导出,有需求的小伙伴可以在评论区留言,有时间我会更新
超级简单POI导出Excel实战的更多相关文章
- POI导出excel的简单demo
目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...
- poi导出excel
Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...
- POI导出EXCEL经典实现
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- java中使用poi导出excel表格数据并且可以手动修改导出路径
在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下
- 重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
- 重构:以Java POI 导出EXCEL为例2
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...
- java POI导出Excel文件数据库的数据
在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...
- POI导出EXCEL经典实现(转)
http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...
随机推荐
- 常用方法 DataTable转换为Entitys
备注:摘自网上 有附地址 public static List<T> DataTableToEntities<T>(this DataTable dt) where T : c ...
- Django 基础篇(二)视图与模板
视图 在django中,视图对WEB请求进行回应 视图接收reqeust对象作为第一个参数,包含了请求的信息 视图就是一个Python函数,被定义在views.py中 #coding:utf- fro ...
- 【JZOJ6214】【20190614】tetris
题目 这是一道和俄罗斯方块有关的有趣题目 底面宽度为\(N\),高度无限,初始时方块高度为\(A_i\) 你可以决定每次会下落一个\(1 \times K\)或者\(K \times 1\)的方块 你 ...
- CentOS7.4下安装部署HAProxy高可用群集
目录第一部分 实验环境第二部分 搭建配置web服务器第三部分 安装配置haproxy服务器第四部分 测试验证第五部分 haproxy配置相关详细解释 第一部分 实验环境1.一台harpoxy调度服务器 ...
- Fluent Meshing生成interface
源视频链接: https://pan.baidu.com/s/1St4o-jB5KRfN5dLsvRe_vQ 提取码: 9rrr
- eclipse 如何将文件编辑器窗口的背景填充为背景图片?
1.情景展示 文件编辑窗口的背景默认为白色. 我们知道,对于整日面对电脑的程序员来说,白色容易造成眼疲劳,而且对于眼睛的伤害比较大. 所以,eclipse添加了黑色主题. 切换成黑色主题 改变 ...
- jvm (一)jvm结构 & 类加载 & 双亲委托模型
参考文档: jvm内幕-java虚拟机详解:http://www.importnew.com/17770.html 常量池:https://www.jianshu.com/p/c7f47de2ee80 ...
- 【Beta】Scrum Meeting 8
前言 Beta阶段第8次会议在5月13日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 修复修改密码问题#54 添加主页公告栏 #57实现 ...
- dubbo学习笔记(二)dubbo中的filter
转:https://www.cnblogs.com/cdfive2018/p/10219730.html dubbo框架提供了filter机制的扩展点(本文基于dubbo2.6.0版本). 扩展接口 ...
- 爬虫中采集动态HTML介绍
JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言.它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网 ...