/**
* 导出
* @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. Flask组件 flask_session

    flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis memcac ...

  2. 技术分享会(二):SQLSERVER索引介绍

    SQLSERVER索引介绍 一.SQLSERVER索引类型? 1.聚集索引: 2.非聚集索引: 3.包含索引: 4.列存储索引: 5.无索引(堆表): 二.如何创建索引? 索引示例: 建表 creat ...

  3. obj比较

    <script> var obj1={name:'one',age:30}; var obj2={name:'one',age:30}; //比较两个字符串对象的[值]是否相等 Objec ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)

    可推出$a_n = n^2+n, $ 设\(S_n = \sum_{i=1}^{n} a_i\) 则 \(S_n = \frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2} ...

  5. iOS 关于BTC 一些知识点

    1.BTC 用这个网 可以校验 自己的库生成的助记词 地址 是否是合法正常的 https://iancoleman.io/bip39/ 2.知晓 BTC 钱包是否有钱 和交易记录 https://te ...

  6. 安装centos7最小化安装

    分享一篇不错的文章: https://www.howtoforge.com/tutorial/centos-7-server/

  7. 20145231熊梓宏 《网络对抗》 实验9 Web安全基础实践

    20145231熊梓宏 <网络对抗> 实验9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? •SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面 ...

  8. 20135320赵瀚青LINUX内核分析第三周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周是学习的主要是构造 ...

  9. slf4j和log4j、logback

    现在主流java项目一般使用slf4j+log4j的日志方案,最近抽点时间扫了一下slf4j.log4j.logback的官方文档,做个笔记.这篇比较不打算描述具体的配置方法,因为官方文档已经讲得很清 ...

  10. 解读:计数器Counter

    Counters: 44 File System Counters FILE: Number of bytes read=655771325 FILE: Number of bytes written ...