/**
* 导出
* @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. cl查看类的内存布局

    查看单个类的内存布局 Microsoft Visual Studio编译器cl的编译选项可以查看源文件中某个C++类的内存布局,对于想了解某个对象的内存布局的人来说十分直观和方便. • 命令格式    ...

  2. 在vue中使用express-mock搭建mock服务

    首先安装 nodemon ,如果是全局安装,那么所有的项目都可以使用mock服务 npm install nodemon 再安装express-mockjs npm i -D express-mock ...

  3. 如何修改opencart的模版适合为mycncart系统使用

    如何修改opencart的模版适合为mycncart系统使用 mycncart跟随opencart的最新代码不断进行升级,并改造和不断加入中国特色的功能,因此opencart的模版均不能够拿来直接套用 ...

  4. 『NiFi 学习之路』自定义 —— 组件的自定义及使用

    一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...

  5. POJ - 1511 - 两次SPFA

    这道题也算是一道模板题,但是第一次用优先队列迪杰斯特拉就T了.1e6的数据量,给了8s,网上其他题解中说要用SPFA. 题意:N个点的带权有向图.每次都从1出发,要到达其余没有被访问过的一个点(发传单 ...

  6. python之subprocess

    官网介绍:https://docs.python.org/3/library/subprocess.html Popen(): [root@oracle scripts]# cat sub_popen ...

  7. hello java !

    我对于计算机性编程性质的课程一直没有很好的悟性,但功夫不服有心,最近自己学习视频课程,随时关注娄老师的博客,慢慢的对于java编程有了新的认识,也用eclipse软件进行了简单java的编译. 了解的 ...

  8. Metasploit 学习

    知识准备:CCNA/CCNP基础计算机知识框架:操作系统.汇编.数据库.网络.安全 木马.灰鸽子.口令破解.用后门拷贝电脑文件 渗透测试工程师 penetration test engineer &l ...

  9. OGNL与ValueStack(VS)-N语法top语法(转)

    N语法[0]:<s:property value="[0]"/><br> N语法[1]:<s:property value="[1]&quo ...

  10. CommonLang3 --StringUtils使用指南

    转载自(http://blog.csdn.net/xuxiaoxie/article/details/52095930)public static boolean isEmpty(CharSequen ...