/**
* 导出
* @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. python全栈开发从入门到放弃之常用模块和正则

    什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...

  2. git 更新某个文件

    1.拉取某个仓库的某个文件 git fetch git checkout origin/master test.php

  3. java 并发——内置锁

    坚持学习,总会有一些不一样的东西. 一.由单例模式引入 引用一下百度百科的定义-- 线程安全是多线程编程时的计算机程序代码中的一个概念.在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同 ...

  4. hdu3518 Boring counting

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3518 题目: Boring counting Time Limit: 2000/1000 MS ...

  5. 使用.NET Core和Vue搭建WebSocket聊天室

    博客地址是:https://qinyuanpei.github.io.  WebSocket是HTML5标准中的一部分,从Socket这个字眼我们就可以知道,这是一种网络通信协议.WebSocket是 ...

  6. Ubuntu 16.04 + Nvidia 显卡驱动 + Cuda 8.0 (问题总结 + 解决方案)【转】

    本文转载自:https://blog.csdn.net/Zafir_410/article/details/73188228 前言 前面好一阵子忙于写论文和改论文,好久没有做新实验了,最近又回到做实验 ...

  7. MysQL使用一查询

    简介 查询的基本语法 select * from 表名; from关键字后面写表名,表示数据来源于是这张表 select后面写表中的列名,如果是*表示在结果中显示表中所有列 在select后面的列名部 ...

  8. Btrace使用入门

    1.什么是BTrace BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆 ...

  9. 实现ModelDriver接口的功能(转)

    ModelDriver接口 来自com.opensymphony.xwork2.ModelDriven.是xwork-2.1.2-750.jar包的东西. 下面是源码: package com.ope ...

  10. Java 面试题基础概念收集

    问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地 ...