struts2结合poi-3.7实现数据导出为excel
来源:互联网 发布:javaweb怎样导入java类 编辑:程序博客网 时间:2024/05/07 07:01
我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来小试牛刀吧,呵呵...
示列截图:
下载后的excel文件:
1、下载poi-3.7相应的jar包,有用的jar包我已经给大家列出来了哦,下载地址:http://download.csdn.net/detail/harderxin/5952435
2、搭建好struts2框架平台,开始编写代码
3、代码如下:
实现方式是我把数据从数据库中取出来后封装为map对象,map的键就是我们上面看到的excel的sheet标题,然后map的值是一个个对应的List对象,也就是excel中的一条条数据,然后插入到excel中,下面代码的链接方式:http://localhost:8080/min/excelAction.do?rjhmId=29349
package com.repair.query.action;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.struts2.ServletActionContext;import com.repair.common.pojo.DatePlanPri;import com.repair.common.pojo.JCZXFixRec;import com.repair.common.util.Contains;import com.repair.query.service.QueryService;/** * 处理Excel文件导入和导出 * * @author Administrator * */public class ExcelAction {@Resource(name = "queryService")private QueryService queryService;/** * 导出excel * * @return */public String execute() {HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();Integer rjhmId = Integer.parseInt(request.getParameter("rjhmId"));DatePlanPri datePlan = queryService.findDatePlanPriById(rjhmId);//将数据从数据库中查询出来,并且自己封装成为一个map对象Map<String, List<JCZXFixRec>> map = this.mapJCZXFixRec(rjhmId);String fileName = datePlan.getJcType() + "-" + datePlan.getFixFreque() + "-" + datePlan.getJcnum() +"-"+dealDateString(datePlan.getKcsj())+".xls";setResponseHeader(response, fileName);try {exportExcel(response.getOutputStream(), map);response.getOutputStream().flush();response.getOutputStream().close();} catch (IOException e) {e.printStackTrace();}return null;}/** * 将检修记录封装为一个map对象 * * @param rjhmId * @return */private Map<String, List<JCZXFixRec>> mapJCZXFixRec(Integer rjhmId) {List<JCZXFixRec> jcZxFixRecs = queryService.findJCZXFixRec(rjhmId);Map<String, List<JCZXFixRec>> map = new HashMap<String, List<JCZXFixRec>>();for (JCZXFixRec jcZxFixRec : jcZxFixRecs) {String unitName = jcZxFixRec.getUnitName();if (map.get(unitName) == null) {map.put(unitName, new ArrayList<JCZXFixRec>());}map.get(unitName).add(jcZxFixRec);}return map;}/** * 文件导出 * @param os * @param map */private void exportExcel(OutputStream os, Map<String, List<JCZXFixRec>> map) {// 创建一个excel文件HSSFWorkbook wb = new HSSFWorkbook();for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {String key = iterator.next();// 创建一个sheet对象HSSFSheet sheet = wb.createSheet(key);//设置单元格宽度sheet.setColumnWidth(1, 6300);sheet.setColumnWidth(4, 5000);// 创建第一行HSSFRow row = sheet.createRow(0);// 设置单元格cteateCell(wb,row,0,"部件");cteateCell(wb,row,1,"检修项目");cteateCell(wb,row,2,"所处节点");cteateCell(wb,row,3,"检修情况");cteateCell(wb,row,4,"配件编号");cteateCell(wb,row,5,"检修人");cteateCell(wb,row,6,"工长");cteateCell(wb,row,7,"质检员");cteateCell(wb,row,8,"技术员");cteateCell(wb,row,9,"交车工长");cteateCell(wb,row,10,"验收员");List<JCZXFixRec> jcZxFixRecs = map.get(key);for (int i = 1; i <= jcZxFixRecs.size(); i++) {JCZXFixRec jcZxFixRec = jcZxFixRecs.get(i - 1);row = sheet.createRow(i);cteateCell(wb,row,0,jcZxFixRec.getUnitName());cteateCell(wb,row,1,jcZxFixRec.getItemName());if (jcZxFixRec.getNodeId().intValue() == Contains.ZX_FG_NODEID.intValue()) {cteateCell(wb,row,2,"机车分解");} else {cteateCell(wb,row,2,"车上组装");}if (jcZxFixRec.getUnit() != null && !"".equals(jcZxFixRec.getUnit())) {cteateCell(wb,row,3,jcZxFixRec.getFixSituation() + jcZxFixRec.getUnit());} else {cteateCell(wb,row,3,jcZxFixRec.getFixSituation());}if (jcZxFixRec.getNodeId().intValue() == Contains.ZX_FG_NODEID.intValue()) {//创建单元格,并且给单元格设置值row.createCell(4).setCellValue("/");} else {if(jcZxFixRec.getUpPjNum()==null){row.createCell(4).setCellValue("");}else{cteateCell(wb,row,4,jcZxFixRec.getUpPjNum());}}if(jcZxFixRec.getFixEmp()!=null){row.createCell(5).setCellValue(jcZxFixRec.getFixEmp().substring(1, jcZxFixRec.getFixEmp().length() - 1) + " "+ jcZxFixRec.getFixEmpTime().substring(5,16));}else{row.createCell(5).setCellValue("");}if(jcZxFixRec.getLead()!=null){row.createCell(6).setCellValue(jcZxFixRec.getLead()+" "+jcZxFixRec.getLdAffirmTime().substring(5,16));}else{row.createCell(6).setCellValue("");}if(jcZxFixRec.getQi()==null&&jcZxFixRec.getItemCtrlQi()==1){row.createCell(7).setCellValue("");}else if(jcZxFixRec.getQi()==null&&jcZxFixRec.getItemCtrlQi()==0){row.createCell(7).setCellValue("/");}else{row.createCell(7).setCellValue(jcZxFixRec.getQi()+" "+jcZxFixRec.getQiAffiTime().substring(5,16));}if(jcZxFixRec.getTeachName()==null&&jcZxFixRec.getItemCtrlTech()==1){row.createCell(8).setCellValue("");}else if(jcZxFixRec.getTeachName()==null&&jcZxFixRec.getItemCtrlTech()==0){row.createCell(8).setCellValue("/");}else{row.createCell(8).setCellValue(jcZxFixRec.getTeachName()+" "+jcZxFixRec.getTeachAffiTime().substring(5,16));}if(jcZxFixRec.getCommitLead()==null&&jcZxFixRec.getItemCtrlComld()==1){row.createCell(9).setCellValue("");}else if(jcZxFixRec.getCommitLead()==null&&jcZxFixRec.getItemCtrlComld()==0){row.createCell(9).setCellValue("/");}else{row.createCell(9).setCellValue(jcZxFixRec.getCommitLead()+" "+jcZxFixRec.getComLdAffiTime().substring(5,16));}if(jcZxFixRec.getAcceptEr()==null&&jcZxFixRec.getItemCtrlAcce()==1){row.createCell(10).setCellValue("");}else if(jcZxFixRec.getAcceptEr()==null&&jcZxFixRec.getItemCtrlAcce()==0){row.createCell(10).setCellValue("/");}else{row.createCell(10).setCellValue(jcZxFixRec.getAcceptEr()+" "+jcZxFixRec.getAcceAffiTime().substring(5,16));}}sheet.autoSizeColumn(5);//调整第六列的宽度sheet.autoSizeColumn(6);//调整第七列的宽度sheet.autoSizeColumn(7);//调整第八列的宽度sheet.autoSizeColumn(8);//调整第九列的宽度sheet.autoSizeColumn(9);//调整第十列的宽度sheet.autoSizeColumn(10);//调整第11列的宽度}try {wb.write(os);} catch (IOException e) {e.printStackTrace();}}/** 设置响应头 */public void setResponseHeader(HttpServletResponse response, String fileName) {try {// response.setContentType("application/msexcel;charset=UTF-8"); //两种方法都可以response.setContentType("application/octet-stream;charset=iso-8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));// 客户端不缓存response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}}/** * 创建带有样式的表格 * @param wb * @param row * @param col * @param val */private void cteateCell(HSSFWorkbook wb,HSSFRow row,int col,String val) {//创建一个celll单元格 HSSFCell cell=row.createCell(col); cell.setCellValue(val); //创建样式 HSSFCellStyle cellstyle=wb.createCellStyle(); cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);//居中对齐 cellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直方向居中对齐 // cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//带边框 cellstyle.setWrapText(true);//设置自动换行 cell.setCellStyle(cellstyle);//给单元格设置样式 }/** * 格式数据 * @param str * @return */@SuppressWarnings("unused")private String format(String str) {if (str != null && !"".equals(str)) {return str;}return "";}/** * 处理日期字符串 * @param date * @return */private String dealDateString(String date){if(date!=null&&!"".equals(date)){String[] str=date.split("-");return str[1]+str[2].substring(0,2);}else{return "";}}}
4、理解上面的代码其实很简单,操作excel中的poi的对象也就是HSSFWorkbook(创建excel文件)、HSSFSheet(创建excel中的sheet)、HSSFRow(创建excel中sheet中的一行),HSSFCell(创建一个cell单元格)、HSSFCellStyle(定义单元格样式),主要就是这些对象了,里面的方法也很好理解的哦!
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.createCellStyle();
一、设置背景色:
setBorder.setFillForegroundColor((short) 13);// 设置背景色
setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
二、设置边框:
setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
三、设置居中:
setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
四、设置字体:
HSSFFont font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小
HSSFFont font2 = wb.createFont();
font2.setFontName("仿宋_GB2312");
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short) 12);
setBorder.setFont(font);//选择需要用到的字体格式
五、设置列宽:
sheet.setColumnWidth(0, 3766); //第一个参数代表列id(从0开始),第2个参数代表宽度值 参考 :"2012-08-10"的宽度为2500
六、设置自动换行:
setBorder.setWrapText(true);//设置自动换行
七、合并单元格:
Region region1 = new Region(0, (short) 0, 0, (short) 6);
//参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
或者用
CellRangeAddress region1 = new CellRangeAddress(rowNumber, rowNumber, (short) 0, (short) 11);
但应注意两个构造方法的参数不是一样的,具体使用哪个取决于POI的不同版本。
sheet.addMergedRegion(region1);
目前用过的就这么多,后续有新的会继续添加。
5、大家也可以从这里下载poi的详细介绍及使用方法!
http://download.csdn.net/detail/harderxin/5953617
- struts2结合poi-3.7实现数据导出为excel
- struts2结合poi-3.7实现数据导出为excel修订版
- struts2+poi导出数据为excel
- struts2结合poi导出excel
- struts2结合poi-3.7实现excel文件数据导入
- struts2 poi 把数据导出到excel
- struts2中使用poi导出excel数据
- POI+Struts2+maven excel 导出数据
- struts2+poi实现excel文件的导出
- struts2+poi实现导出Excel文件
- Struts2+Poi实现导出excel功能
- Struts2+poi实现Excel文件导出
- Struts2 POI实现导出Excel功能
- 用POI把数据导出为Excel
- 用POI把数据导出为Excel
- 用POI把数据导出为Excel
- Struts2 poi导出excel
- EXT结合POI导出数据到Excel表格
- GSL积分运算
- Java中遍历大容量map的正确方法
- HTML5 本地存储
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- php 创建文件夹
- struts2结合poi-3.7实现数据导出为excel
- 利用队列实现广度优先搜索
- DDoS攻击工具
- mysql备份实例攻略(2013.08.15)
- Java Quartz 自动调度
- 支付宝推出类“NFC”支付,离线支付首次披露
- DataGridView合并表头实现 、二维表头的实现、单元格合并
- GSL样条函数插值1
- 关于java语言中容器的学习笔记