超级简单POI多sheet导出Excel实战
本章节主要基于上一章节单sheet导出的基础上进行改造实现多sheet的导出,上一章节参考地址:https://www.cnblogs.com/sunny1009/p/11437005.html
1.数据准备
这里导出两个sheet为例进行讲解,第一个sheet导出学生基本信息,表结构和数据参考上一章节,第二个sheet导出区域基本信息,具体数据和脚本如下
CREATE TABLE `td_area` (
`id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
`level` tinyint(1) unsigned NOT NULL COMMENT '层级',
`parent_code` bigint(14) unsigned NOT NULL DEFAULT '' COMMENT '父级行政代码',
`area_code` bigint(14) unsigned NOT NULL DEFAULT '' COMMENT '行政代码',
`zip_code` mediumint(6) unsigned zerofill NOT NULL DEFAULT '' COMMENT '邮政编码',
`city_code` char(6) NOT NULL DEFAULT '' COMMENT '区号',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
`short_name` varchar(50) NOT NULL DEFAULT '' COMMENT '简称',
`merger_name` varchar(50) NOT NULL DEFAULT '' COMMENT '组合名',
`pinyin` varchar(30) NOT NULL DEFAULT '' COMMENT '拼音',
`lng` decimal(10,6) NOT NULL DEFAULT '0.000000' COMMENT '经度',
`lat` decimal(10,6) NOT NULL DEFAULT '0.000000' COMMENT '纬度',
PRIMARY KEY (`id`),
UNIQUE KEY `idx` (`area_code`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=778093 DEFAULT CHARSET=utf8 COMMENT='中国行政地区表';
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '北京市', '北京', '北京', 'BeiJing', '116.407526', '39.904030');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '天津市', '天津', '天津', 'TianJin', '117.200983', '39.084158');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '河北省', '河北', '河北', 'HeBei', '114.468664', '38.037057');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '山西省', '山西', '山西', 'ShanXi', '112.562398', '37.873531');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '内蒙古自治区', '内蒙古', '内蒙古', 'NeiMengGu', '111.765617', '40.817498');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '辽宁省', '辽宁', '辽宁', 'LiaoNing', '123.429440', '41.835441');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '吉林省', '吉林', '吉林', 'JiLin', '125.325990', '43.896536');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '黑龙江省', '黑龙江', '黑龙江', 'HeiLongJiang', '126.661669', '45.742347');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '上海市', '上海', '上海', 'ShangHai', '121.473701', '31.230416');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '江苏省', '江苏', '江苏', 'JiangSu', '118.763232', '32.061707');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '浙江省', '浙江', '浙江', 'ZheJiang', '120.152791', '30.267446');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '安徽省', '安徽', '安徽', 'AnHui', '117.284922', '31.861184');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '福建省', '福建', '福建', 'FuJian', '119.295144', '26.100779');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '江西省', '江西', '江西', 'JiangXi', '115.909228', '28.675696');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '山东省', '山东', '山东', 'ShanDong', '117.020359', '36.668530');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '河南省', '河南', '河南', 'HeNan', '113.753602', '34.765515');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '湖北省', '湖北', '湖北', 'HuBei', '114.341861', '30.546498');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '湖南省', '湖南', '湖南', 'HuNan', '112.983810', '28.112444');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '广东省', '广东', '广东', 'GuangDong', '113.266530', '23.132191');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '广西壮族自治区', '广西', '广西', 'GuangXi', '108.327546', '22.815478');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '海南省', '海南', '海南', 'HaiNan', '110.349228', '20.017377');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '重庆市', '重庆', '重庆', 'ChongQing', '106.551556', '29.563009');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '四川省', '四川', '四川', 'SiChuan', '104.075931', '30.651651');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '贵州省', '贵州', '贵州', 'GuiZhou', '106.707410', '26.598194');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '云南省', '云南', '云南', 'YunNan', '102.710002', '25.045806');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '西藏自治区', '西藏', '西藏', 'XiZang', '91.117212', '29.646922');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '陕西省', '陕西', '陕西', 'ShanXi', '108.954239', '34.265472');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '甘肃省', '甘肃', '甘肃', 'GanSu', '103.826308', '36.059421');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '青海省', '青海', '青海', 'QingHai', '101.780199', '36.620901');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '宁夏回族自治区', '宁夏', '宁夏', 'NingXia', '106.258754', '38.471317');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '新疆维吾尔自治区', '新疆', '新疆', 'XinJiang', '87.627704', '43.793026');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '香港特别行政区', '香港', '香港', 'Hong Kong', '114.173355', '22.320048');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '澳门特别行政区', '澳门', '澳门', 'Macau', '113.549090', '22.198951');
INSERT INTO `study`.`td_area` (`id`, `level`, `parent_code`, `area_code`, `zip_code`, `city_code`, `name`, `short_name`, `merger_name`, `pinyin`, `lng`, `lat`) VALUES ('', '', '', '', '', '', '台湾省', '台湾', '台湾', 'Taiwan', '121.520076', '25.030724');
2.创建区域信息查询接口
package com.sunny.spring.boot.poi.service; import com.sunny.spring.boot.poi.pojo.TdArea; import java.util.List; /**
* @ClassName: IAreaService
* @Description:
* @Author: sunt
* @Date: 2019/9/2 15:49
* @Version 1.0
**/
public interface IAreaService { /**
* 查询所有行政区域信息
* @return
*/
List<TdArea> queryAreaInfo();
}
3.实体Bean创建
package com.sunny.spring.boot.poi.pojo; import cn.afterturn.easypoi.excel.annotation.Excel;
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-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class TdArea implements Serializable { private static final long serialVersionUID = 1L; /**
* 层级
*/
@Excel(name = "层级", width = 20, orderNum = "1")
private int level; /**
* 父级行政代码
*/
@Excel(name = "父级行政代码", width = 20, orderNum = "1")
private Long parentCode; /**
* 行政代码
*/
@Excel(name = "行政代码", width = 20, orderNum = "1")
private Long areaCode; /**
* 邮政编码
*/
@Excel(name = "邮政编码", width = 20, orderNum = "1")
private Integer zipCode; /**
* 区号
*/
@Excel(name = "区号", width = 20, orderNum = "1")
private String cityCode; /**
* 名称
*/
@Excel(name = "名称", width = 20, orderNum = "1")
private String name; /**
* 简称
*/
@Excel(name = "简称", width = 20, orderNum = "1")
private String shortName; /**
* 组合名
*/
@Excel(name = "组合名", width = 20, orderNum = "1")
private String mergerName; /**
* 拼音
*/
@Excel(name = "拼音", width = 20, orderNum = "1")
private String pinyin; /**
* 经度
*/
@Excel(name = "经度", width = 20, orderNum = "1")
private BigDecimal lng; /**
* 纬度
*/
@Excel(name = "纬度", width = 20, orderNum = "1")
private BigDecimal lat; }
4.导出Controller
具体代码都有详细注释
/**
* 多个sheet的导出
* 第一个sheet展示学生基本信息
* 第二个sheet展示区域信息基本信息
* 步骤:
* 构建一个List<Map<String, Object>> list 多个Map key title 对应表格Title key entity 对应表格对应实体 key data
* 具体操作看代码
* @param response
*/
@RequestMapping("/exportMoreSheet")
public void exportMoreSheet(HttpServletResponse response) {
//1.分别构建学生与区域信息导出参数
ExportParams stuParam = new ExportParams();
ExportParams areaParam = new ExportParams(); stuParam.setSheetName("学生基本信息");
stuParam.setHeight((short) 8);
stuParam.setStyle(ExcelExportMyStylerImpl.class); areaParam.setSheetName("区域基本信息");
areaParam.setHeight((short) 8);
areaParam.setStyle(ExcelExportMyStylerImpl.class); //2.构建分别填充数据:data(数据)、title(标题)、entity(导出属性)
Map<String, Object> exportStuMap = new HashMap<String, Object>();
Map<String, Object> exportAreaMap = new HashMap<String, Object>(); exportStuMap.put("data", studentService.queryAllStudent());
exportStuMap.put("title", stuParam);
exportStuMap.put("entity", StudentInfoBean.class); exportAreaMap.put("data", areaService.queryAreaInfo());
exportAreaMap.put("title", areaParam);
exportAreaMap.put("entity", TdArea.class); //3.组装参数
List<Map<String, Object>> sheetsList = new ArrayList<Map<String, Object>>();
sheetsList.add(exportStuMap);
sheetsList.add(exportAreaMap); try {
//4.调用导出接口
Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
String fileName = "多sheet导出"+new SimpleDateFormat("yyyyMMdd").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();
}
}
5.测试
浏览器访问导出Controller:http://127.0.0.1:8080/export/exportMoreSheet
第二个sheet的值:
超级简单POI多sheet导出Excel实战的更多相关文章
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- POI导入和导出Excel总结
POI导入和导出Excel总结 POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...
- apache poi根据模板导出excel
需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; im ...
- 超级简单POI导出Excel实战
在一般的生产管理系统都会将数据通过页面导出到Excel,这里以Java为例通过第三方开源poi进行对Excel的操作,具体操作如下 1.引入jar包依赖 这里我以maven的方式引入jar包,具体依赖 ...
- POI 生成、导出Excel(包含多个sheet)带 图片
1.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...
- 使用Apache poi来编写导出excel的工具类
在JavaWeb开发的需求中,我们会经常看到导出excel的功能需求,然后java并没有提供操作office文档的功能,这个时候我们就需要使用额外的组件来帮助我们完成这项功能了. 很高兴Apache基 ...
- POI通过模板导出EXCEL文件
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...
- poi 和jxl导出excel(2)
controller: /** * 导出报表 * @return */ @RequestMapping(value = "/export") @ResponseBody publi ...
随机推荐
- C++ OpenSSL 之二:生成RSA文件
1.等同于生成private key: openssl genrsa -out "save_path" 2048 2.代码如下 bool MakeRsaKeySSL(const c ...
- Go如何使用数据库、缓存
database/sql 接口 Go官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口database/sql,开发者可以根据定义的接口来开发相应的数据库驱动,这样做有一个好处,只要是按照 ...
- Bootstrap基础学习 ---- 系列文章
[Bootstrap基础学习]05 Bootstrap学习总结 [Bootstrap基础学习]04 Bootstrap的HTML和CSS编码规范 [Bootstrap基础学习]03 Bootstrap ...
- 题解:洛谷P1891 疯狂LCM
原题链接 题目描述 描述: 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N)+...+LCM(N,N) ...
- 25-C#笔记-文件的输入输出
1. 写txt FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileSh ...
- python paramiko与linux的连接
两种使用paramiko连接到linux服务器的代码 方式一: 1 ssh = paramiko.SSHClient() 2 ssh.set_missing_host_key_policy(param ...
- 【可持久化线段树】【P5826】【模板】子序列自动机
[可持久化线段树][P5826][模板]子序列自动机 Description 给定一个序列 \(A\),有 \(q\) 次询问,每次询问一个序列 \(B\) 是不是 \(A\) 的子序列 Limita ...
- 【数位DP】【P2657】[SCOI2009]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为 \(2\) 的正整数被称为windy数. windy想知道, 在 \(A\) 和 \(B\) 之间,包括 ...
- React 积累
1. Fragment 标签 使用介绍:因React要求每个组件都需要一个大的外层包裹起来才可以,否则报错,如果你并不想组件外层由一个大大外层包裹,则可以使用Fragment 标签 代码示例: imp ...
- a标签设置水平右对齐
1.情景展示 如上图所示,这其实是一个a标签,如何让它右对齐呢? 2.解决方案 第一步:将行内标签转化成块级元素,即display:block: 第二步:文字右对齐,即text-align:rig ...