POI方式实现Excel表格数据导出

摘要:
Excel表格导出1.添加pom依赖1˂!

Excel表格导出

1.添加pom依赖

1         <!-- office 操作工具 -->
2         <dependency>
3             <groupId>org.apache.poi</groupId>
4             <artifactId>poi</artifactId>
5             <version>3.17</version>
6         </dependency>
7         <dependency>
8             <groupId>org.apache.poi</groupId>
9             <artifactId>poi-ooxml</artifactId>
10             <version>3.17</version>
11         </dependency>
12 
13         <dependency>
14             <groupId>org.apache.poi</groupId>
15             <artifactId>poi-scratchpad</artifactId>
16             <version>3.17</version>
17         </dependency>

2.编写导出Excel的工具类

1 public classMyExcelUtils {
2     /**
3 * @paramtitles  表头
4 * @paramout
5 * @paramlistMap 数据
6 * @paramkeys    数据库字段(与表头相对应)
7      */
8     public static void export(String[] titles, ServletOutputStream out, List<Map<String, Object>>listMap, String[] keys) {
9         try{
10             //1.创建一个workbook,对应一个Excel文件
11             HSSFWorkbook workbook = newHSSFWorkbook();
12             //2.在workbook中添加一个sheet,对应Excel文件中的sheet
13             HSSFSheet hssfSheet = workbook.createSheet("列表1");
14             //3.在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
15             HSSFRow row = hssfSheet.createRow(0);
16             //4.创建单元格 设置表单  居中
17             HSSFCellStyle hssfCellStyle =workbook.createCellStyle();
18             HSSFCell hssfCell = null;
19             for (int i = 0; i < titles.length; i++) {
20                 hssfCell = row.createCell(i);//列索引从0开始
21                 hssfCell.setCellValue(titles[i]);//列名1
22                 hssfCell.setCellStyle(hssfCellStyle);//列居中显示
23 }
24             //5.填充数据
25             for (int i = 0; i < listMap.size(); i++) { //行数
26                 row = hssfSheet.createRow(i + 1); //表数据的起始行数为 1
27                 //数据库数据
28                 Map<String, Object> map =listMap.get(i);
29                 for (int j = 0; j < titles.length; j++) { //列数
30 row.createCell(j).setCellValue((String) map.get(keys[j]));
31 }
32 }
33             //6.将文件输出到客户端浏览器
34             try{
35 workbook.write(out);
36 out.flush();
37 out.close();
38             } catch(Exception e) {
39 e.printStackTrace();
40 }
41         } catch(Exception e) {
42 e.printStackTrace();
43 }
44 }
45 }

3.后端Controller实现(Controller参数: HttpServletResponse response)

为保证Excel表格的表头和其列值相匹配,采用两个数组进行一一对应(或使用Map)

1         //Excel表头、文件名(titles的长度和xml中sql查询的字段个数(keys长度)一致)
2         String[] titles = {"编号", "姓名", "年龄"};
3         //Excel文件名
4         String name = "Excel表格下载";
5         //数据库对应字段
6         String[] keys = {"id", "name", "age"};
7
8         response.setContentType("application/binary;charset=UTF-8");
9         try{
10             ServletOutputStream out =response.getOutputStream();
11             try{
12                 //设置文件头:一个参数是设置下载文件名
13                 response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(name + ".xls", "UTF-8"));
14             } catch(UnsupportedEncodingException e1) {
15 e1.printStackTrace();
16 }
17             //数据库对应的需要导出的Excel数据
18             List<Map<String, Object>> listMap =exportExcelDAO.exportExcelData();
19             //MyExcelUtils下载Excel
20 MyExcelUtils.export(titles, out, listMap, keys);
21 } catch(Exception e) { 22 e.printStackTrace();
23 }

免责声明:文章转载自《POI方式实现Excel表格数据导出》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SPSS统计分析(第5版)【java开发系列】—— java输入输出流下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java对象序列化、gzip压缩解压缩、加密解密

有时在应用中需要将java对象序列化存储起来,有的需要压缩,有的需要加密 EncryptUtil.java Java代码 packageorg.test.demo; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importj...

ReactiveX 学习笔记(35)使用 RxDart + RxCommand 进行 GUI 编程

课题 程序界面由3个文本编辑框和1个文本标签组成。 要求文本标签实时显示3个文本编辑框所输入的数字之和。 文本编辑框输入的不是合法数字时,将其值视为0。 3个文本编辑框的初值分别为1,2,3。 创建工程 Flutter 安装完毕之后执行以下命令创建工程 flutter create rx_example 打开 Android Studio,File...

FastJSON反序列化学习

反序列化漏洞例子 0x00、fastJSON练习 参考上面的链接,写一个类,并用fastJSON序列化。查阅API,fastJSON的序列化函数有: public abstract class JSON { // 将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBean public static String...

Delphi指针及其它(转)

一、指针:指向一个内存地址的变量或参数。二、定义指针的方式如下:P: Pointer; //定义了可以指向任何类型的指针,Pointer 为无类型指针;Q, R: ^TType; //定义了指向 TType 类型的两个指针,TType 可是是各种//基本类型或自己定义的各种类型,也可以如下定义:// type PType = ^TType;// var Q...

消息队列之 ActiveMQ

简介 ActiveMQ 特点 ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。 它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收...

PDF合并

要求:将多个table导出到一个PDF里,然后打印。  问题分析:要求将四个table放一个PDF打印,四个table的列各不相同,第一个是表头,其他三个是列表,列比表头多很多,如果直接生成一个excel,然后再直接导出会发现有些列在PDF中换行了。  原因:因为excle可打印的区域是有限制的,可打印的地方如下方法可见:文件-打印-设置-打印选择区域(如...