POI之Excel导出
1,在maven的pom文件中添加依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
2,在Controller中添加转发接口
@ResponseBody
@RequestMapping(value="exportExcel", method={RequestMethod.GET, RequestMethod.POST})
public String exportExcel(HttpServletRequest request, String name, String data) {
JSONObject result = new JSONObject();
result.put("code", 0);
result.put("msg", "success");
try {
HSSFWorkbook workbook = new HSSFWorkbook();
Method method = IExportExcelService.class.getDeclaredMethod(name + "Export", new Class[]{HSSFWorkbook.class, String.class});
method.invoke(exportExcelService, workbook, data);
String filename = name + GhFormatUtils.getFileDate() + ".xls";
String realpath = request.getServletContext().getRealPath("/");
String filepath = filedir + "/" + filename;
FileOutputStream fos = new FileOutputStream(realpath + filepath);
workbook.write(fos);
fos.close();
workbook.close();
result.put("data", filepath);
} catch (Exception e) {
e.printStackTrace();
result.put("code", -1);
result.put("msg", e.getMessage());
}
return result.toString();
}
3,在Service层编写相应生成格式的pdf
//公共函数
public void exportExcel(HSSFSheet sheet, String[] keys, JSONArray data) throws Exception {
sheet.setDefaultColumnWidth(15);
JSONObject head = (JSONObject)data.remove(0);
int lastRowNum = sheet.getLastRowNum();
//创建标题行
HSSFRow headRow = sheet.createRow(++lastRowNum);
HSSFCellStyle headerStyle = sheet.getWorkbook().createCellStyle();
headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
headerStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
for(int i = 0; i < keys.length; i++) {
HSSFCell cell = headRow.createCell(i);
cell.setCellValue(head.getString(keys[i]));
cell.setCellStyle(headerStyle);
}
HSSFCellStyle dataStyle = sheet.getWorkbook().createCellStyle();
dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
//创建数据明细行
for(int i = 0; i < data.size(); i++) {
HSSFRow row = sheet.createRow(++lastRowNum);
JSONObject rowData = data.getJSONObject(i);
for(int j = 0; j < keys.length; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(rowData.getString(keys[j]));
cell.setCellStyle(dataStyle);
}
}
}
//具体处理函数
@Override
public void offerExport(HSSFWorkbook workbook, String dataStr) throws Exception {
JSONObject data = JSONObject.parseObject(dataStr);
JSONArray detail = data.getJSONArray("detail");
Map<String, String> dict = basMgmtService.getDictMap("col1");
//数据处理,用数据字典翻译数据
for(int i = 0; i < detail.size(); i++) {
JSONObject obj = detail.getJSONObject(i);
obj.put("col1", dict.get(obj.getString("col1")));
}
JSONObject head = new JSONObject();
String keys[] = {"col1","col2"};
head.putAll(new HashMap<String, String>(){{
put(keys[0], "第一列名称");
put(keys[1], "第二列名称");
//......
}});
detail.add(0, head);
//创建工作页
HSSFSheet sheet = workbook.createSheet(data.getString("titleName"));
//创建表头标题
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, keys.length - 1));
HSSFRow titleRow = sheet.createRow(0);
HSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellValue(data.getString("titleName"));
HSSFCellStyle titleStyle = workbook.createCellStyle();
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titleCell.setCellStyle(titleStyle);
exportExcel(sheet, keys, detail);
}
4,前端请求
//公共导出Excel
function commExcel(url, name, data, appPath) {
$.ajax({
url : url,
type : 'post',
dataType : "json",
data : {
name : name,
data : JSON.stringify(data)
},
async : true,
success : function(result,status,xhr) {
if(result.code == 0) {
$("<a href=" + appPath + result.data + " />")[0].click();
} else {
var msg = result.msg;
if(!msg) {
msg = "请求失败,请手动刷新页面!";
}
top.layer.alert(msg);
}
},
error : function(xhr,status,err) {
top.layer.alert(err);
}
});
}
//页面导出Excel
function exportExcel() {
var url = "${adminPath}/finance/export/exportExcel";
var data = {
titleName : "excel名称",
customerName: "用户名称",
detail : detail
};
commExcel(url, "offer", data, "${appPath}");
}
POI之Excel导出的更多相关文章
- 转:POI操作Excel导出
package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...
- Apache POI实现excel导出
链接:http://poi.apache.org/ Excel数据导出步骤: 使用poi 完成账户数据的导出功能 导入poi jar包并添加到classpath中 1.查询数据 2.定义导出头 St ...
- poi实现Excel导出
最近做了一个导出Excel的小功能,以前没接触过,现在分享下自己的代码,想让各位帮忙看看有啥地方可以优化,也方便自己以后查阅... 首先是excelAction的代码: /** * excelActi ...
- poi excel导出,下载
poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...
- 使用POI实现数据导出Excel表格
package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- POI通过模板导出EXCEL文件
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...
- 纳税服务系统【用户模块之使用POI导入excel、导出excel】
前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...
随机推荐
- php学习一:语法规则
1.书写规则 在html中嵌入php的时候,需要有结束语,即<?php ...?>,在靠近结束符号的最后一个语句可以不用写分号: 但是在单独的php中,最后可以不用以?>来结尾; 2 ...
- 好用的在线Markdown编辑器
dillinger.io 支持在线编辑,导出为html格式等.
- @ResponseBody将集合数据转换为json格式并返回给客户端
spring-mvc.xml: <beans xmlns:mvc="http://www.springframework.org/schema/mvc" > <m ...
- 调试寄存器 原理与使用:DR0-DR7
调试寄存器 原理与使用:DR0-DR7 下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结. 希望能给你带去有用的信 ...
- MyBatis官方文档——入门
入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 ...
- LeetCode——Summary Ranges
Description: Given a sorted integer array without duplicates, return the summary of its ranges. For ...
- [Java语言] HashMap,HashSet,Hashtable,Vector,ArrayList 的关系 <转>
这么几个比较常用的但是比较容易混淆的概念同出于 java.util 包.本文仅作几个类的浅度解析. (本文基于JDK1.7,源码来自openjdk1.7.) ├── Collection │ ├── ...
- 监控linux流量shell版
想要实时查看linux流量情况,又不想再去下第三方工具,可以直接写脚步运行! 系统:centos 6.5 原理:从/proc/net/dev中获取到流量情况,再通过换算并除以间隔时间来得到流量单位M ...
- 09.Curator临时节点
使用Curator也可以简化Ephemeral Node (临时节点)的操作.临时节点驻存在ZooKeeper中,当连接和session断掉时被删除.比如通过ZooKeeper发布服务,服务启 ...
- 170614、MySQL存储引擎-MyISAM与InnoDB区别
MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理 ...