java 导出Excel文档工具类
2015-01-14 10:25
369 查看
import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; /** * 导出Excel文档工具类 * @author admin * @date 2014-11-22 * */ public class ExcelUtil { /** * 创建excel文档, * @param list 数据 * @param keys list中map的key数组集合 * @param columnNames excel的列名 * */ public static Workbook createWorkBook(List<Map<String, Object>> list, String[] keys, String columnNames[],String model) { // 创建excel工作簿 Workbook wb = new HSSFWorkbook(); // 创建第一个sheet(页),并命名 // Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); //Sheet sheet = wb.createSheet("预约看房导出"); Sheet sheet = wb.createSheet(model); // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。 for (int i = 0; i < keys.length; i++ ) { sheet.setColumnWidth((short)i, (short)(35.7 * 150)); } // 创建第一行 Row row = sheet.createRow((short)0); // 创建两种单元格格式 CellStyle cs = wb.createCellStyle(); CellStyle cs2 = wb.createCellStyle(); // 创建两种字体 Font f = wb.createFont(); Font f2 = wb.createFont(); // 创建第一种字体样式(用于列名) f.setFontHeightInPoints((short)10); f.setColor(IndexedColors.BLACK.getIndex()); f.setBoldweight(Font.BOLDWEIGHT_BOLD); // 创建第二种字体样式(用于值) f2.setFontHeightInPoints((short)10); f2.setColor(IndexedColors.BLACK.getIndex()); // Font f3=wb.createFont(); // f3.setFontHeightInPoints((short) 10); // f3.setColor(IndexedColors.RED.getIndex()); // 设置第一种单元格的样式(用于列名) cs.setFont(f); cs.setBorderLeft(CellStyle.BORDER_THIN); cs.setBorderRight(CellStyle.BORDER_THIN); cs.setBorderTop(CellStyle.BORDER_THIN); cs.setBorderBottom(CellStyle.BORDER_THIN); cs.setAlignment(CellStyle.ALIGN_CENTER); // 设置第二种单元格的样式(用于值) cs2.setFont(f2); cs2.setBorderLeft(CellStyle.BORDER_THIN); cs2.setBorderRight(CellStyle.BORDER_THIN); cs2.setBorderTop(CellStyle.BORDER_THIN); cs2.setBorderBottom(CellStyle.BORDER_THIN); cs2.setAlignment(CellStyle.ALIGN_CENTER); //设置列名 for (int i = 0; i < columnNames.length; i++ ) { Cell cell = row.createCell(i); cell.setCellValue(columnNames[i]); cell.setCellStyle(cs); } //设置每行每列的值 for (short i = 1; i < list.size(); i++ ) { // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的 // 创建一行,在页sheet上 Row row1 = sheet.createRow((short)i); // 在row行上创建一个方格 for (short j = 0; j < keys.length; j++ ) { Cell cell = row1.createCell(j); cell.setCellValue(list.get(i).get(keys[j]) == null ? " " : list.get(i).get(keys[j]).toString()); cell.setCellStyle(cs2); } } return wb; } }
测试:
Map<String, Object> retMap = new HashMap<String, Object>(); String orderCode = ServletRequestUtils.getStringParameter(request, "order_code", ""); List<Map<String, Object>> retList = hotelOrderService.queryExportInfo(orderCode); //时间转换 for (Map<String, Object> it : retList) { String inDate = String.valueOf(new SimpleDateFormat(DateUtil.DATE_STYLE_SIMPLE).format(it.get("in_date"))); it.put("in_date", inDate); String outDate = String.valueOf(new SimpleDateFormat(DateUtil.DATE_STYLE_SIMPLE).format(it.get("out_date"))); it.put("out_date", outDate); Object obj = it.get("pay_time"); if(obj != null) { String payTime = String.valueOf(new SimpleDateFormat(DateUtil.DATE_STYLE_BASIC).format(obj)); it.put("pay_time", payTime); } String createTime = String.valueOf(new SimpleDateFormat(DateUtil.DATE_STYLE_BASIC).format(it.get("create_time"))); it.put("create_time", createTime); Object updateObj = it.get("update_time"); if(updateObj != null) { String updateTime = String.valueOf(new SimpleDateFormat(DateUtil.DATE_STYLE_BASIC).format(updateObj)); it.put("update_time", updateTime); } } if (retList.size() > 0) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //文件名 String fileName = "预订" + DateUtil.currentDate(DateUtil.DATE_STYLE_SIMPLE); //excel表头 String columnNames[] = {"订单编号", "联系人姓名", "联系人电话", "所选房型", "所定间数", "入住时间", "离店时间", "最迟几点前到达", "特殊要求", "支付方式", "订单状态", "价格", "门市价格", "订单总价", "支付时间", "订单创建时间", "订单更新时间"}; //对应字段 String keys[] = {"order_code", "name", "tel", "room_name", "nums", "in_date", "out_date", "come_date", "special_cmd", "pay_type", "order_state", "room_price", "retail_price", "total_price", "pay_time", "create_time", "update_time"}; ByteArrayOutputStream os = new ByteArrayOutputStream(); ExcelUtil.createWorkBook(retList, keys, columnNames, "预订导出").write(os); byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); // 设置response参数,可以打开下载页面 response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } retMap.put("msg", "预订数据导出成功!"); return retMap; } catch (UnsupportedEncodingException e) { log.error(e.toString() + " : " + e.getMessage()); //插入异常日志 insertErrorLog(request, MODULE, "export UnsupportedEncodingException#" + e.toString()); retMap.put("msg", "预订数据导出失败!"); return retMap; } catch (IOException e) { log.error(e.toString() + " : " + e.getMessage()); //插入异常日志 insertErrorLog(request, MODULE, "export IOException#" + e.toString()); } finally { try { if (bis != null) { // bis.close(); } if (bos != null) { bos.flush(); //bos.close(); } } catch (IOException e) { log.error(e.toString() + " : " + e.getMessage()); //插入异常日志 insertErrorLog(request, MODULE, "export IOException#" + e.toString()); retMap.put("msg", "预订数据导出失败!"); return retMap; } } } else { retMap.put("msg", "无对应的数据可以导出!"); retMap.put("size", "isNull"); } return retMap; }
相关文章推荐
- Java项目之查询处理的数据导出成Excel文档工具类
- Java导出Excel工具类
- java导出Excel文档
- JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil
- java导入和导出excel文档(支持xls,xlsx格式)
- JAVA语言工具类封装-基于poi的excel导出功能
- Java导出Excel工具类
- Java SpringMVC项目导出excel多种类对应工具类整理(util)
- java excel导出工具类
- Java SpringMVC项目导出excel多种类对应工具类整理(util)
- 自己写的java excel导出工具类
- java导入和导出excel文档(支持xls,xlsx格式)
- java页面导出excel实例,java页面导出word文档实例
- Java导入导出Excel工具类ExcelUtil
- java代码写excel和文本文档的导入导出
- java导出excel,导入excel,导出csv工具类整理
- Java基础学习总结(49)——Excel导入导出工具类
- Java基础学习总结(49)——Excel导入导出工具类
- java poi导出与导入excel 工具类
- JAVA语言工具类封装-基于poi的excel导出功能