spring boot 使用POI导出数据到Excel表格
在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表格的操作无疑是最强大的。
1.POI简介
Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI 提供 API 给 Java 程式对 Microsoft Office(Excel、WORD、PowerPoint、Visio 等,主要实现用于 Excel)格式档案读和写的功能,POI 为 “ Poor Obfuscation Implementation ” 的首字母缩写,意为简洁版的模糊实现。
POI结构:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
因为使用的是POI对Excel的操作,所以先介绍一下HSSF中的常用类:
类名 说明
HSSFWorkbook Excel的文档对象
HSSFSheet Excel的表单
HSSFRow Excel的行
HSSFCell Excel的格子单元
HSSFFont Excel字体
HSSFDataFormat 格子单元的日期格式
HSSFHeader Excel文档Sheet的页眉
HSSFFooter Excel文档Sheet的页脚
HSSFCellStyle 格子单元样式
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
2.在项目中导入POI的依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.</version>
</dependency>
3.controller层
@GetMapping("/export")
public ResponseEntity<byte[]> exportEmp(){
List list = 数据库查询到所有要导出的数据;
return EmpUtils.exportEmp(employeeList);
}
首先从数据库查询到具体的要导出到Excel的数据,controller层的返回值为ResponseEntity<byte[]>。
4.Java使用poi的构建Excel表格
public class EmpUtils {
public static ResponseEntity<byte[]> exportEmp(List<Employee> employeeList) {
//1.创建一个excel文档
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
//2.创建文档摘要
hssfWorkbook.createInformationProperties();
//3.获取并配置文档摘要信息
DocumentSummaryInformation docInfo = hssfWorkbook.getDocumentSummaryInformation();
//文档类别
docInfo.setCategory("XXX信息");
//文档管理员
docInfo.setManager("hope");
//文档所属公司
docInfo.setCompany("xxxx");
//文档版本
docInfo.setApplicationVersion(1);
//4.获取文档摘要信息
SummaryInformation summaryInformation = hssfWorkbook.getSummaryInformation();
//文档标题
summaryInformation.setAuthor("hopec");
//文档创建时间
summaryInformation.setCreateDateTime(new Date());
//文档备注
summaryInformation.setComments("文档备注");
//5.创建样式
//创建标题行的样式
HSSFCellStyle headerStyle = hssfWorkbook.createCellStyle();
//设置该样式的图案颜色为黄色
// headerStyle.setFillForegroundColor(IndexedColors.GREEN.index);//设置图案颜色
// headerStyle.setFillBackgroundColor(IndexedColors.RED.index);//设置图案背景色
headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
//设置图案填充的样式
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//设置日期相关的样式
HSSFCellStyle dateCellStyle = hssfWorkbook.createCellStyle();
//这里的m/d/yy 相当于yyyy-MM-dd
dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
HSSFSheet sheet = hssfWorkbook.createSheet("xxx信息表");
//设置每一列的宽度
sheet.setColumnWidth(0,5*256);
sheet.setColumnWidth(1,12*256);
sheet.setColumnWidth(2,10*256);
sheet.setColumnWidth(3,5*256);
sheet.setColumnWidth(4,16*256);
sheet.setColumnWidth(5,20*256);
sheet.setColumnWidth(6,10*256);
sheet.setColumnWidth(7,10*256);
sheet.setColumnWidth(8,18*256);
sheet.setColumnWidth(9,12*256);
//6.创建标题行
HSSFRow r0 = sheet.createRow(0);
HSSFCell c0 = r0.createCell(0);
c0.setCellValue("编号");
c0.setCellStyle(headerStyle);
HSSFCell c1 = r0.createCell(1);
c1.setCellStyle(headerStyle);
c1.setCellValue("姓名");
HSSFCell c2 = r0.createCell(2);
c2.setCellStyle(headerStyle);
c2.setCellValue("工号");
HSSFCell c3 = r0.createCell(3);
c3.setCellStyle(headerStyle);
c3.setCellValue("性别");
HSSFCell c4 = r0.createCell(4);
c4.setCellStyle(headerStyle);
c4.setCellValue("出生日期");
HSSFCell c5 = r0.createCell(5);
c5.setCellStyle(headerStyle);
c5.setCellValue("身份证号码");
HSSFCell c6 = r0.createCell(6);
c6.setCellStyle(headerStyle);
c6.setCellValue("婚姻状况");
HSSFCell c7 = r0.createCell(7);
c7.setCellStyle(headerStyle);
c7.setCellValue("民族");
HSSFCell c8 = r0.createCell(8);
c8.setCellStyle(headerStyle);
c8.setCellValue("籍贯");
HSSFCell c9 = r0.createCell(9);
c9.setCellStyle(headerStyle);
c9.setCellValue("政治面貌");
HSSFCell c10 = r0.createCell(10);
for (int i = 0; i < employeeList.size(); i++) {
Employee employee= employeeList.get(i);
HSSFRow row = sheet.createRow(i+1);
row.createCell(0).setCellValue(employee.getId());
row.createCell(1).setCellValue(employee.getName());
row.createCell(2).setCellValue(employee.getWorkID());
row.createCell(3).setCellValue(employee.getGender());
HSSFCell cell4 = row.createCell(4);
//单独设置日期的样式
cell4.setCellStyle(dateCellStyle);
cell4.setCellValue(employee.getBirthday());
row.createCell(5).setCellValue(employee.getIdCard());
row.createCell(6).setCellValue(employee.getWedlock());
row.createCell(7).setCellValue(employee.getNation().getName());
row.createCell(8).setCellValue(employee.getNativePlace());
row.createCell(9).setCellValue(employee.getPoliticsstatus().getName());
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
HttpHeaders headers = new HttpHeaders();
try {
//将数据表这几个中文的字转码 防止导出后乱码
headers.setContentDispositionFormData("attachment",
new String("数据表.xls".getBytes("UTF-8"),"ISO-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
hssfWorkbook.write(stream);
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(stream.toByteArray(),headers, HttpStatus.CREATED);
}
}
5.页面调用
exportEmp(){
this.$confirm('此操作将导出员工数据, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
window.open('/employee/basic/export','_parent')
}).catch(() => {
this.$message({
type: 'info',
message: '已取消导出'
});
});
},
其中/employee/basic/export为后台接口的restfulAPI地址。
spring boot 使用POI导出数据到Excel表格的更多相关文章
- 导出数据到Excel表格
开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- Spring Boot利用poi导出Excel
至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...
- Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented
在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...
- spring boot:使用poi导出excel电子表格文件(spring boot 2.3.1)
一,什么是poi? 1,poi poi是用来兼容微软文档格式的java api, 它是apache的顶级项目之一, 也是我们在生产环境中导出excel时使用最多的库 2,poi官方网站: http:/ ...
- spring boot 整合 poi 导出excel
一. 第一种方式 1.首先从中央仓库中导入架包Poi3.14以及Poi-ooxml3.14. <dependency> <groupId>org.apache.poi</ ...
- java利用poi导出数据到excel
背景: 上一篇写到利用jtds连接数据库获取对应的数据,本篇写怎样用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** ...
- 使用poi导出数据到excel
一.首先是导入poi所需要的jar包,我是用的是maven,添加jar包依赖 <dependency> <groupId>org.apache.poi</groupId& ...
- PHP批量导出数据为excel表格
之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...
随机推荐
- <每日一题>题目25:快速排序
''' 快速排序:分而治之,一分为二进行排序 ''' import cProfile import random def quick_sort(nums): if len(nums) <= 1: ...
- Qt源码下载
这是官方下载地址:http://qt.nokia.com/downloads 点击右下角的 ftp.qt.nokia.com - Archive You can find our archive of ...
- windows API 第 11 篇 GetCurrentDirectory SetCurrentDirectory
GetCurrentDirectory函数获得当前文件所在的目录,并不是进程的目录(debug 和 release),它和GetCommandLine不同这里只讲 GetCurrentDirector ...
- js算法之把一个数组按照指定的数组大小分割成若干个数组块
题目描述: 把一个数组arr按照指定的数组大小size分割成若干个数组块. 例如: chunk([1,2,3,4],2)=[[1,2],[3,4]]; chunk([1,2,3,4,5 ...
- 如何用SPSS做联合分析
如何用SPSS做联合分析 如果产品的描述是由几个属性特征决定的,比如说mp3的音质.外形.容量.价格等等,商家为了确定哪个属性对消费者的影响最大,以及预测什么样的属性组合最受消费者的欢迎,选择的办法应 ...
- docker 整理
管理 docker批量删除容器.镜像 1.删除所有容器 docker rm `docker ps -a -q` 1.1 按条件删除容器 删除包含某个字段 ,镜像名或容器名均可, 例如删除 zhy* ...
- pycharm professional 2019版长效激活
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...
- 单例模式(Singleton)(单一实例)
单例模式基本要点: 用于确保一个类只有一个实例,并且这个实例易于被访问. 让类自身负责保存他的唯一实例.这个类可以保证没有其他实例创建,并且他可以提供一个访问实例的方法,来实现单例模式. (1)把构造 ...
- WPF 线程中异常导致程序崩溃
一般我们WPF中都加全局捕获,避免出现异常导致崩溃. Application.Current.DispatcherUnhandledException += Current_DispatcherUnh ...
- 探索SpringBoot中的SpringMVC
spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc.spring mvc 是只是spring 处理web层请求的一个模块 ...