springmvc poi实现报表导出
1.pom文件:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
2.controller 根据需要组装数据:
private List<Map<String, Object>> createList(List<User> users){
if(null == users) {
return null;
}
String[] keys = {"name", "gender", "phoneNo", "email"};
String[] excelHeader = {"姓名","性别", "手机号", "邮箱"};
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> model = new HashMap<String, Object>();
model.put("fileName", "用户表" + new Date().getTime());
model.put("sheetName", "表一");
model.put("title", "用户表");
model.put("keys", keys);
model.put("excelHeader", excelHeader);
list.add(model); for(User user : users) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", user.getName());
map.put("gender", user.getGender());
map.put("phoneNo", user.getPhoneNo());
map.put("email", user.getEmail());
list.add(map);
}
return list;
}
3.ExcelUtil:
private static final Logger LOG = LoggerFactory.getLogger(ExcelUtil.class); /**创建一个excel文件*/
private static Workbook createWorkBoot(String title,
String[] excelHeader, List<Map<String, Object>> list, String[] keys) {
Workbook workbook = new HSSFWorkbook();
//设置sheet的名字
Sheet sheet = workbook.createSheet(list.get(0).get("sheetName").toString());
/*设置表格宽度*/
for(int i = 0; i < keys.length; i++){
sheet.setColumnWidth(i, 35*150);
} /*font样式设置字体大小,是否加粗*/
Font titleFont = createFont(workbook, (short)20, true);
Font headerFont = createFont(workbook, (short)12, true);
Font bodyFont = createFont(workbook, (short)12, false);
/*cell通用样式*/
CellStyle titleStyle = createStyle(workbook, titleFont);
CellStyle headerStyle = createStyle(workbook, headerFont);
CellStyle bodyStyle = createStyle(workbook, bodyFont); // excel中当前行索引
int index = 0;
/*合并标题的单元格设置标题信息及样式 */
sheet.addMergedRegion(new CellRangeAddress(index, index, index,
excelHeader.length - 1));
Row titleRow = sheet.createRow(index++);
Cell titleCell = titleRow.createCell(0);
titleCell.setCellValue(title);
titleCell.setCellStyle(titleStyle); /*设置表格头信息及样式*/
Row headerRow = sheet.createRow(index++);
for(int i = 0; i < excelHeader.length; i++) {
Cell headerCell = headerRow.createCell(i);
headerCell.setCellValue(excelHeader[i]);
headerCell.setCellStyle(headerStyle);
} /*设置每行每 列的值及样式
*Row为行,cell为方格
*创建i*j个方格并设置对应的属性值*/
for(int i = 1; i < list.size(); i++) {
Row bodyRow = sheet.createRow(index++);
for (int j = 0; j < keys.length; j++) {
Cell bodyCell = bodyRow.createCell(j);
bodyCell.setCellValue(list.get(i).get(keys[j]) == null ?
" " : list.get(i).get(keys[j]).toString());
bodyCell.setCellStyle(bodyStyle);
}
}
return workbook;
} /**设置字体大小,颜色,样式,是否加粗*/
private static Font createFont(Workbook workbook,
short fontHeightInPoints, boolean isBlod) {
Font font = workbook.createFont();
//字体大小
font.setFontHeightInPoints(fontHeightInPoints);
//字体颜色
font.setColor(IndexedColors.BLACK.getIndex());
//字体样式
font.setFontName("宋体");
//是否加粗
font.setBold(isBlod);
return font;
} /**设置字体居中显示,背景色,边框*/
private static CellStyle createStyle(Workbook workbook, Font font) {
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
//居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//背景颜色
cellStyle.setFillForegroundColor(IndexedColors.WHITE.index);
cellStyle.setFillBackgroundColor(IndexedColors.WHITE.index);
cellStyle.setFillPattern(FillPatternType.FINE_DOTS);
//边框
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
return cellStyle;
} public static boolean exportExcel(HttpServletResponse response,List<Map<String, Object>> list) throws IOException {
String fileName = list.get(0).get("fileName").toString();
String[] excelHeader = (String [])list.get(0).get("excelHeader");
String[] keys = (String [])list.get(0).get("keys");
String title = list.get(0).get("title").toString(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
createWorkBoot(title, excelHeader, list, keys).write(baos);
} catch (IOException e) {
LOG.error("将workbook中信息写入输出流时失败");
return false;
}
byte[] content = baos.toByteArray();
InputStream is = new ByteArrayInputStream(content); response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
response.setHeader("Content-Disposition", "attachment;filename="
+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
ServletOutputStream sos = response.getOutputStream();
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(sos);
byte[] buff = new byte[2048];
int byteRead = 0;
while (-1 != (byteRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, byteRead);
}
} catch (IOException e) {
LOG.error("创建excel文件时失败");
return false;
} finally {
if (bos != null)
bos.close();
if (bis != null)
bis.close();
if(is != null)
is.close();
if(baos != null)
baos.close();
}
return true;
}
导出效果
springmvc poi实现报表导出的更多相关文章
- Ireport 报表导出 Poi + ireport 导出pdf, word ,excel ,htm
Ireport 报表导出 Poi + ireport 导出pdf, doc ,excel ,html 格式 下面是报表导出工具类reportExportUtils 需要导出以上格式的报表 只需要调用本 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率
本片博客是紧接着Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志写的 关于poi.jxl和esayExcel的介绍自行百度. jxl最多支持03版excel,所以单个 ...
- poi报表导出4.1.0版本工具类 导出并下载
这一段时间,由于项目上线基于稳定,所以我这边在基于我们一期迭代的分支上优化一部分我们之前没有做的功能,报表导出.本身之前用的是3.5的版本,但是由于同事要写导入,写的代码只有4.1.0的版本支持,所以 ...
- JAVA将Excel中的报表导出为图片格式(一)问题背景
如题所示,先抛出一个问题,如何使用JAVA将Excel中的报表导出为图片格式? 首先说一下这个问题的背景,也就是为什么博主会碰到这个问题 随着微信,易信之流大行其道,企业内部的办公交流.绩效考评甚至考 ...
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- kettle工具实现报表导出的初步搭建
1.下载kettle 国外网站:http://kettle.pentaho.org/需要FQ,下载慢 2.下载完成启动(windows)-->spoon.bat 3.进入界面,两个主要的tab页 ...
- JasperReport报表导出踩坑实录
写在最前面 翻了翻博客,因为太忙,已经好久没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六月份的时候写过一篇利用poi文件导入导出的小De ...
- 报表导出之easypoi的应用
报表导出有很多种方法,像之前我有写过的jxl,poi,jasperreport又或者各种商业软件,这次来简单介绍下用了许久的开源轮子easypoi. easypoi的底层原理就不介绍了.因为官方文档的 ...
随机推荐
- Linux中source命令的用法
source命令: source命令也称为“点命令”,也就是一个点符号(.).source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.因为linux所有的操作都会变成文 ...
- 安装FFMpeg CentOS 7
https://linuxadmin.io/install-ffmpeg-on-centos-7/
- 增大dma的分配
前言 项目中需要通过驱动与fpga通讯,获取fpga往内存里写的数据.因为数据量比较大,需要驱动分配600多M的内存给fpga来写数据,且因为是与fpga通讯,需要连续的内存,还得是uncached的 ...
- 【openjudge】C15C Rabbit's Festival CDQ分治+并查集
题目链接:http://poj.openjudge.cn/practice/C15C/ 题意:n 点 m 边 k 天.每条边在某一天会消失(仅仅那一天消失).问每一天有多少对点可以相互到达. 解法:开 ...
- 2015多校第6场 HDU 5361 并查集,最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...
- 调用微信JS-SDK接口上传图片
最近要在微信上做个问卷调查,有个上传图片功能,折腾找了半天资料,都不好弄,最终打算调用微信提供的上传图片接口,实现上传图片功能!此功能最大的好处是可以在微信服务器上暂存图片,减少本地服务器图片的缓存, ...
- js前端数据加密插件
(2014-11-14 15:37:35) 转载▼ 标签: it 分类: Web前端开发 摘要: 大部分动态网站都支持从客户端到服务器传递数据,如果传递的数据被别人截取就非常危险,尤其是一些用户名密码 ...
- 微软推出ASP.NET Core 2.0,并支持更新Visual Studio 2017
微软推出ASP.NET Core 2.0的一般可用性,并发布.NET Core 2.0.该公司还推出了其旗舰集成开发环境(IDE)的更新:Visual Studio 2017版本15.3和Visual ...
- ASP.NET Core学习链接
https://www.cnblogs.com/artech/p/dependency-injection-in-asp-net-core.html http://www.cnblogs.com/ar ...
- find命令的基本用法
linux 中find 常用示例解析 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression] 其实[-H] [-L] [- ...