/**
* 导出
* @param request
* @param response
* @throws Exception
*/
@SuppressWarnings("unchecked")
@RequestMapping(value="vehicleMaintainExport.do")
public void exportVehicleMaintain(HttpServletRequest request,
HttpServletResponse response) throws Exception{ String param = request.getParameter("param");
JSONObject jsonObject = JSONObject.fromObject(param); VehicleMaintainVo vehicleMaintainVo = (VehicleMaintainVo) JSONObject.toBean(jsonObject, VehicleMaintainVo.class);
String date = DateUtil.format(new Date(), DateUtil.YYYYMMDD);
// 获取输出文件的名字
String displayName = PropertiesManager.getProperty("export.vehicleMaintain.fileName")+date+".xls";
response.setContentType("application/vnd.ms-excel");
BufferedOutputStream out = null;
// 进行转码,使其支持中文文件名
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(displayName.getBytes("UTF-8"), "iso-8859-1"));
try {
// 获取输出流
out = new BufferedOutputStream(response.getOutputStream());
} catch (FileNotFoundException e1) {
log.error(e1);
}
// 获取表格的表头字段名称
String gridHead = PropertiesManager.getProperty("export.vehicleMaintain.columnNames");
// 获取字段变量的名字
String fieldNames = PropertiesManager.getProperty("export.vehicleMaintain.fieldNames");
// 创建Excel
HSSFWorkbook wb = new HSSFWorkbook();
// 生成工作薄sheet(包含头信息)
HSSFSheet mainSheet = this.generateSheet(wb, displayName, gridHead);
// 设置数据样式
HSSFCellStyle normalDataStyle = wb.createCellStyle();
normalDataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 用户查询出来的总记录
long total = this.getTotal();
// 计算需要分批查询的次数
int eachQuerySize = Integer.parseInt(PropertiesManager.getProperty("export.excel.book.maxSheet"));
int no = (int) total / eachQuerySize + 1;
vehicleMaintainVo.setPageSize((int) total);
// 追加数据时,第几行
int rowNum = 0;
// 一行时,第几个单元格
int num = 0;
// 当前记录的数目
int currentRecordNum = 0;
int sheetNameIndex = 2;
int maxRow = Integer.parseInt(PropertiesManager.getProperty("export.excel.sheet.maxRow"));
for(int n=1;n<=no;n++){
vehicleMaintainVo.setPage(n);
Page page = vehicleMaintainService.pageQuery(vehicleMaintainVo);
List<VehicleMaintain>list = (List<VehicleMaintain>) page.getRows();
for(VehicleMaintain vm:list){
vm.setDeleteFlag(vm.getDeleteFlag().equals("0")?"未删除":"已删除");
if (currentRecordNum > maxRow) {
mainSheet = this.generateSheet(wb, displayName
+ sheetNameIndex, gridHead);
sheetNameIndex++;
currentRecordNum = 0;
rowNum = 0;
}
currentRecordNum++;
num = 0;
HSSFRow row = mainSheet.getRow(1 + rowNum);
if (row == null) {
row = mainSheet.createRow(1 + rowNum);
}
// Insert data
for (String field : fieldNames.split(",")) {
HSSFCell cell = row.getCell(num);
if (cell == null) {
cell = row.createCell(num);
}
cell.setCellStyle(normalDataStyle);
Field f = VehicleMaintain.class.getDeclaredField(field);
f.setAccessible(true);
Object value = f.get(vm); this.setCellValue(cell, value);
num++;
}
rowNum++;
}
} try {
wb.write(out);
out.flush();
} catch (Exception e) {
log.error(e);
}finally{
try {
out.close();
JCDFWebUtil.Log(request, "导出车辆安装维护,参数为:"+param);
} catch (IOException e) {
log.error(e);
}
}
} /**
* 获取sheet
*
* @param wb
* @param sheetName 表格工作薄的名字
* @param gridHead 表格的表头字段名称
* @return
*/
private HSSFSheet generateSheet(HSSFWorkbook wb, String sheetName,
String gridHead) {
// 判断表头信息是否为空
if (null == gridHead) {
throw new RuntimeException("表头信息为空,无法导出!");
}
HSSFSheet mainSheet = wb.createSheet(sheetName);
// 设置标题sheet信息的样式
HSSFFont headFont = wb.createFont();
headFont.setFontHeightInPoints((short) 20);
headFont.setColor(HSSFFont.COLOR_RED);
HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(headFont); // 设置头信息的样式
HSSFFont titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 8);
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titleFont.setColor(HSSFFont.COLOR_NORMAL);
HSSFCellStyle headerStyle = wb.createCellStyle();
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
headerStyle.setFont(titleFont); String[] gridList = gridHead.split(",");
// 创建第一行
HSSFRow headRow = mainSheet.createRow(0); // 在第一行中添加头信息数据
int num = 0;
for (int i = 0; i < gridList.length; i++) {
String column = gridList[i];
// 创建单元格
HSSFCell headCell = headRow.createCell(num);
HSSFRichTextString h = new HSSFRichTextString(column);
headCell.setCellValue(h);
headCell.setCellStyle(headerStyle);
int columnWidth = 100;
mainSheet.setColumnWidth(num, columnWidth * 30);
num++;
}
return mainSheet;
} private void setCellValue(HSSFCell cell, Object value) {
if (value instanceof java.lang.String) {
cell.setCellValue(new HSSFRichTextString(value.toString()));
} else if (value instanceof java.lang.Number) {
cell.setCellValue(Double.parseDouble(value.toString()));
} else if (value instanceof java.lang.Boolean) {
cell.setCellValue(Boolean.parseBoolean(value.toString()));
} else if (value instanceof java.util.Date) {
cell.setCellValue(DateUtil.format((Date) value,DateUtil.YYYY_MM_DD));
} else {
cell.setCellValue("");
}
}

Java导出Excel(有数据库导出代码)的更多相关文章

  1. jxl java工具类,导出excel,导入数据库

    1: 引入jxl jar 我使用的为maven管理, <!--Excel工具--> <dependency> <groupId>net.sourceforge.je ...

  2. java实现excel的导入导出(poi详解)[转]

    java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava  经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...

  3. java的excel表格的导出与下载

    今天做一个java对excel表格的导出和下载的时候,从网络上搜寻了下载的模板,代码如下: 控制层: @RequestMapping(value = "excelOut_identifier ...

  4. C# 使用Epplus导出Excel [2]:导出动态列数据

    C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...

  5. C# 使用Epplus导出Excel [1]:导出固定列数据

    C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...

  6. java POI导出Excel文件数据库的数据

    在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.这里我简单实现导出Excel文件. POI jar ...

  7. java 中Excel的导入导出

    部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字  的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...

  8. JAVA 导出 Excel, JS 导出 Excel

    本介绍两种Excle导出方法: JAVA 导出 Excle, JS 导出 Excle 1, js 根据 html 页面的 table > tr > td 标签导出 js代码: //导出 v ...

  9. PHP导入导出excel表格图片的代码和方法大全

    基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...

  10. JAVA对Excel的导入导出

    今天需要对比2个excel表的内容找出相同:由于要学的还很多上手很慢所以在这做个分享希望对初学的有帮助: 先是pom的配置: <dependency> <groupId>org ...

随机推荐

  1. CCoolBar 的替代方案 CDockablePane。

    (阅读受众需有一定MFC知识储备.) (技术支持:http://www.cnblogs.com/shuhaoc/archive/2011/06/26/cdockableform.html) 在以往很多 ...

  2. SqlAlchemy 中操作数据库时session和scoped_session的区别(源码分析)

    原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalch ...

  3. 微信小程序组件navigator

    导航navigator:官方文档 Demo Code: // redirect.js navigator.js Page({ onLoad: function(options) { this.setD ...

  4. windows 下安装 rabbitmq报init terminating in do_boot错误

    好长时间没有写东西了,记一个安装笔记吧. 目前市面上比较常用的几个消息中间件,rabbitmq算是风评比较好的,所以就拿来安装一下玩玩喽(很有可能也仅限于是安装一下....)安装过程不表,无非是下载E ...

  5. OpenStack的架构详解

    OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...

  6. Please check registry access list (whitelist/blacklist)

    https://blog.csdn.net/sprita1/article/details/51735566

  7. netty12---线程池简单源码

    package com.cn; import java.io.IOException; import java.nio.channels.Selector; import java.util.Queu ...

  8. Linux 安全配置指南

    1.Bios Security 一定要给Bios设置密码,以防通过在Bios中改变启动顺序,而可以从软盘启动.这样可以阻止别人试图用特殊的启动盘启动你的系统,还可以阻止别人进入Bios改动其中的设置( ...

  9. try cath

    用try cath 的缺点? 举例: 一个程序 有3层.基类层,中间层,和  使用层. 在 基类层 使用 try cath 如果发生 异常,将会 一层一层 冒泡到 使用层 并弹出报错信息:效率 大大降 ...

  10. Windows打开软件老是弹出无法验证发布者

    使用组策略管理器 gpedit.msc 用户配置-管理模板-Windows组件-附件管理器-中等风险文件类型的包含列表 .exe;.cmd;.bat;.js即可