java 实体类,工具类
import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; 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.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.commons.utils.POIUtil; import com.commons.vo.JSONMessage; import com.wlsq.cloudpark.service.CloudParkingEntryRecordService; @Controller @RequestMapping("loginrecord") public class ExcelRecordExport { @Resource private CloudParkingEntryRecordService cloudParkingRecordService; /** * 记录导出 * @param request * @param response * @throws Exception */ @RequestMapping("revenue_managent_down_export.htm") @ResponseBody public JSONMessage revenueManagementDownExport(HttpServletRequest request, HttpServletResponse response) throws Exception { try { JSONMessage jsonMessage = new JSONMessage(); String homeName = request.getParameter("export_home_name");//文件名 String parking_id = String.valueOf(request.getParameter("export_parking_id")); String pay_state = request.getParameter("export_pay_state"); String start_time= request.getParameter("export_start_time"); String end_time= request.getParameter("export_end_time"); //创建表格头部 List<Map<String, Object>> headInfoList = new ArrayList<Map<String, Object>>(); Map<String, Object> itemMap = new HashMap<String, Object>(); itemMap.put("title", "停车场"); itemMap.put("columnWidth", 60); itemMap.put("dataKey", "XH1"); headInfoList.add(itemMap); itemMap = new HashMap<String, Object>(); itemMap.put("title", "车牌号"); itemMap.put("columnWidth", 30); itemMap.put("dataKey", "XH2"); headInfoList.add(itemMap); itemMap = new HashMap<String, Object>(); itemMap.put("title", "卡号"); itemMap.put("columnWidth", 40); itemMap.put("dataKey", "XH3"); headInfoList.add(itemMap); Map<String, Object> maps = new HashMap<String, Object>(); maps.put("pay_state", pay_state); maps.put("start_time", start_time); maps.put("end_time", end_time); if(parking_id !=null&&!parking_id.equals("")){ maps.put("parking_id", parking_id); } List<Map<String,Object>> coc= cloudParkingRecordService.selectCloudParkEntryRecordMap(maps); // excel 导出功能【数据填充】 List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>(); Map<String, Object> dataItem = null; // 限制下载数量2000 if (coc.size() > 2000) { jsonMessage.put("exportQuantity", coc.size()); return jsonMessage; } for (int i = 0; i < coc.size(); i++) { dataItem = new HashMap<String, Object>(); Map<String,Object> de = coc.get(i); dataItem.put("XH1", de.get("parking_name")); dataItem.put("XH2", de.get("car_no")); dataItem.put("XH3", de.get("flag_no")); dataList.add(i, dataItem); } String writePath = ""; String file_name = homeName; String path = "export/" + file_name + ".xls"; POIUtil poiUtil = new POIUtil(); // 1.创建 Workbook HSSFWorkbook hssfWorkbook = poiUtil.getHSSFWorkbook(); // 2.创建 Sheet HSSFSheet hssfSheet = poiUtil.getHSSFSheet(hssfWorkbook, file_name); hssfSheet.createFreezePane(0, 1);//冻结导出excel第一行 // 3.写入 head poiUtil.writeHeader(hssfWorkbook, hssfSheet, headInfoList); // 4.写入内容 poiUtil.writeContent(hssfWorkbook, hssfSheet, 1, headInfoList, dataList); // 5.保存文件到filePath中 String realPath = request.getSession().getServletContext().getRealPath("/"); File file1 = new File(realPath+ path.substring(0, path.lastIndexOf("/"))); if (!file1.exists()) file1.mkdirs(); writePath = realPath + path; FileOutputStream out1 = new FileOutputStream(writePath); try { hssfWorkbook.write(out1); out1.close(); jsonMessage.put("exportQuantity", coc.size()); jsonMessage.put("path", path); jsonMessage.put("file_name", file_name); return jsonMessage; } catch (final Exception e) { e.printStackTrace(); new Thread() { @Override public void run() { // 获取错误日志 ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); } }.start(); } } catch (Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); } return null; } /** * 获取导出的excel保存到本地服务器,获取地址下载 * @throws UnsupportedEncodingException */ @RequestMapping("export_download.htm") public void exportDownload(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { request.setCharacterEncoding("utf-8"); FileInputStream fis = null; BufferedInputStream bis = null; OutputStream os = null; try { String path = new String(request.getParameter("path")); String srcName = new String(request.getParameter("src")); path = request.getSession().getServletContext().getRealPath("/" + path); String fileName = path.substring(path.lastIndexOf("/") + 1); String fileType = fileName.substring(fileName.lastIndexOf(".") + 1); response.reset();// 清空buffer,设置页面不缓存 if (fileType.equals("xls") || fileType.equals("xlsx")) { response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); // 通常解决汉字乱码方法用URLEncoder.encode(...) String filenamedisplay = URLEncoder.encode(srcName, "UTF-8"); if ("FF".equals(getBrowser(request))) { // 针对火狐浏览器处理方式不一样了 filenamedisplay = new String(srcName.getBytes("UTF-8"),"iso-8859-1"); } response.setHeader("Content-Disposition","attachment;filename=" + filenamedisplay + ".xls"); } fis = new FileInputStream(path); bis = new BufferedInputStream(fis); os = response.getOutputStream(); byte[] b = new byte[200]; int size = bis.read(b); while (size > 0) { os.write(b, 0, size); size = bis.read(b); } os.flush(); os.close(); bis.close(); fis.close(); File file = new File(path); if (file.isFile() && file.exists()) { file.delete(); } } catch (Exception e) { e.printStackTrace(); // 获取错误日志 ByteArrayOutputStream baos = new ByteArrayOutputStream(); e.printStackTrace(new PrintStream(baos)); try { os.close(); bis.close(); fis.close(); } catch (Exception ex) { } } } // 以下为服务器端判断客户端浏览器类型的方法 private String getBrowser(HttpServletRequest request) { String UserAgent = request.getHeader("USER-AGENT").toLowerCase(); if (UserAgent != null) { if (UserAgent.indexOf("msie") >= 0) return "IE"; if (UserAgent.indexOf("firefox") >= 0) return "FF"; if (UserAgent.indexOf("safari") >= 0) return "SF"; } return null; } }
package com.commons.utils; import org.apache.poi.hssf.usermodel.*; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.List; import java.util.Map; /** * poi 导出excel 工具类 */ public class POIUtil { /** * 1.创建 workbook * @return */ public HSSFWorkbook getHSSFWorkbook(){ return new HSSFWorkbook(); } /** * 2.创建 sheet * @param hssfWorkbook * @param sheetName sheet 名称 * @return */ public HSSFSheet getHSSFSheet(HSSFWorkbook hssfWorkbook, String sheetName){ return hssfWorkbook.createSheet(sheetName); } /** * 3.写入表头信息 * @param hssfWorkbook * @param hssfSheet * @param headInfoList List<Map<String, Object>> * key: title 列标题 * columnWidth 列宽 * dataKey 列对应的 dataList item key */ public void writeHeader(HSSFWorkbook hssfWorkbook,HSSFSheet hssfSheet ,List<Map<String, Object>> headInfoList){ HSSFCellStyle cs = hssfWorkbook.createCellStyle(); HSSFFont font = hssfWorkbook.createFont(); font.setFontHeightInPoints((short)12); font.setBoldweight(font.BOLDWEIGHT_BOLD); cs.setFont(font); cs.setAlignment(cs.ALIGN_CENTER); HSSFRow r = hssfSheet.createRow(0); r.setHeight((short) 380); HSSFCell c = null; Map<String, Object> headInfo = null; //处理excel表头 for(int i=0, len = headInfoList.size(); i < len; i++){ headInfo = headInfoList.get(i); c = r.createCell(i); c.setCellValue(headInfo.get("title").toString()); c.setCellStyle(cs); if(headInfo.containsKey("columnWidth")){ hssfSheet.setColumnWidth(i, (short)(((Integer)headInfo.get("columnWidth") * 8) / ((double) 1 / 20))); } } } /** * 4.写入内容部分 * @param hssfWorkbook * @param hssfSheet * @param startIndex 从1开始,多次调用需要加上前一次的dataList.size() * @param headInfoList List<Map<String, Object>> * key: title 列标题 * columnWidth 列宽 * dataKey 列对应的 dataList item key * @param dataList */ public void writeContent(HSSFWorkbook hssfWorkbook,HSSFSheet hssfSheet ,int startIndex, List<Map<String, Object>> headInfoList, List<Map<String, Object>> dataList){ Map<String, Object> headInfo = null; HSSFRow r = null; HSSFCell c = null; //处理数据 Map<String, Object> dataItem = null; Object v = null; for (int i=0, rownum = startIndex, len = (startIndex + dataList.size()); rownum < len; i++,rownum++){ r = hssfSheet.createRow(rownum); r.setHeightInPoints(16); dataItem = dataList.get(i); for(int j=0, jlen = headInfoList.size(); j < jlen; j++){ headInfo = headInfoList.get(j); c = r.createCell(j); v = dataItem.get(headInfo.get("dataKey").toString()); if (v instanceof String) { c.setCellValue((String)v); }else if (v instanceof Boolean) { c.setCellValue((Boolean)v); }else if (v instanceof Calendar) { c.setCellValue((Calendar)v); }else if (v instanceof Double) { c.setCellValue((Double)v); }else if (v instanceof Integer || v instanceof Long || v instanceof Short || v instanceof Float) { c.setCellValue(Double.parseDouble(v.toString())); }else if (v instanceof HSSFRichTextString) { c.setCellValue((HSSFRichTextString)v); }else { if(v == null){ c.setCellValue(""); }else{ c.setCellValue(v.toString()); } } } } } public void write2FilePath(HSSFWorkbook hssfWorkbook, String filePath) throws IOException{ FileOutputStream fileOut = null; try{ fileOut = new FileOutputStream(filePath); hssfWorkbook.write(fileOut); }finally{ if(fileOut != null){ fileOut.close(); } } } /** * 导出excel * code example: List<Map<String, Object>> headInfoList = new ArrayList<Map<String,Object>>(); Map<String, Object> itemMap = new HashMap<String, Object>(); itemMap.put("title", "序号1"); itemMap.put("columnWidth", 25); itemMap.put("dataKey", "XH1"); headInfoList.add(itemMap); itemMap = new HashMap<String, Object>(); itemMap.put("title", "序号2"); itemMap.put("columnWidth", 50); itemMap.put("dataKey", "XH2"); headInfoList.add(itemMap); itemMap = new HashMap<String, Object>(); itemMap.put("title", "序号3"); itemMap.put("columnWidth", 25); itemMap.put("dataKey", "XH3"); headInfoList.add(itemMap); List<Map<String, Object>> dataList = new ArrayList<Map<String,Object>>(); Map<String, Object> dataItem = null; for(int i=0; i < 100; i++){ dataItem = new HashMap<String, Object>(); dataItem.put("XH1", "data" + i); dataItem.put("XH2", 88888888f); dataItem.put("XH3", "脉兜V5.."); dataList.add(dataItem); } POIUtil.exportExcel2FilePath("test sheet 1","F:\\temp\\customer2.xls", headInfoList, dataList); * @param sheetName sheet名称 * @param filePath 文件存储路径, 如:f:/a.xls * @param headInfoList List<Map<String, Object>> * key: title 列标题 * columnWidth 列宽 * dataKey 列对应的 dataList item key * @param dataList List<Map<String, Object>> 导出的数据 * @throws java.io.IOException * */ public static void exportExcel2FilePath(String sheetName, String filePath, List<Map<String, Object>> headInfoList, List<Map<String, Object>> dataList) throws IOException { POIUtil poiUtil = new POIUtil(); //1.创建 Workbook HSSFWorkbook hssfWorkbook = poiUtil.getHSSFWorkbook(); //2.创建 Sheet HSSFSheet hssfSheet = poiUtil.getHSSFSheet(hssfWorkbook, sheetName); //3.写入 head poiUtil.writeHeader(hssfWorkbook, hssfSheet, headInfoList); //4.写入内容 poiUtil.writeContent(hssfWorkbook, hssfSheet, 1, headInfoList, dataList); //5.保存文件到filePath中 poiUtil.write2FilePath(hssfWorkbook, filePath); } }
jsp页面: <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.form.js"></script>//不可缺少 <!-- 导出数据start --> <form id="export_excel" action="" enctype="multipart/form-data" method="post"> <input type="hidden" id="export_select_value" name="export_select_value"> <input type="hidden" id="export_parking_id" name="export_parking_id" > <input type="hidden" id="export_time_type" name="export_time_type" > <input type="hidden" id="export_pay_state" name="export_pay_state" > <input type="hidden" id="export_parking_type" name="export_parking_type"> <input type="hidden" id="export_start_time" name="export_start_time" > <input type="hidden" id="export_end_time" name="export_end_time"> <input type="hidden" id="export_home_name" name="export_home_name"> </form> <div class="ownerExport_div" style="height:200px;width: 500px;position: absolute;top: 30%;left: 40%;border: 1px solid #dddddd; background-color: #F8F8FF;z-index: 999999;padding-top:10ox;"> <div class="bi_div_title">记录批量下载</div> <br> <div style="text-align:center;"> <span style="color:red;font-size:13px;">注意:一次性只能导出2000条信息。</span><br> </div> <div style="clear: both;"></div> <div class="ac_foot_div"> <button class="owner_export_qr" style="">导出</button> <button class="owner_export_qx" style="width: 58px; height: 32px;border: 1px solid #ddd; margin-left: 10px;font-size: 12px;">取消</button> </div> </div> <!-- 导出数据end --> js代码: on("click",".owner_export_qr",function(){ $("#export_start_time").val($("#search_start_date").val()); $("#export_end_time").val($("#search_end_date").val()); $("#export_parking_id").val($(".su_change_parking").val()); $("#export_select_value").val($(".search_input").val()); if($(".pay_state").val() != 0){ $("#export_pay_state").val($(".pay_state").val()); }else{ $("#export_pay_state").val(""); } if($(".parking_type").val() != 0){ $("#export_parking_type").val($(".parking_type").val()); }else{ $("#export_parking_type").val(""); } if($(".time_type").val() == 0){ $("#export_time_type").val(""); }else{ $("#export_time_type").val($(".time_type").val()); } $("#export_home_name").val("记录导出"); $("#export_excel").ajaxSubmit({ url:'loginrecord/revenue_managent_down_export.htm',//后台请求路径 dataType: 'JSON', success:function(data){ var obj= data; $(".containers").css("display","none"); //验证导出数据不能为空 if(obj.exportQuantity<=0){ swal({ title: "操作提示:", text: "请注意:没有可导出的数据", type: "warning", showCancelButton: true, closeOnConfirm: true, confirmButtonText: "确认", confirmButtonColor: "#DD6B55", cancelButtonText: "关闭", }, function() { }); }else if(obj.exportQuantity>2000){ swal({ title: "操作提示:", text: "请注意:导出数量超过2000条。", type: "warning", showCancelButton: true, closeOnConfirm: true, confirmButtonText: "确认", confirmButtonColor: "#DD6B55", cancelButtonText: "关闭", }, function() { }); }else if(obj.exportQuantity<=2000 && obj.exportQuantity>0){ //path后台请求下载文件路径,src:excel名称 window.location.href="loginrecord/export_download.htm?path="+obj.path+"&src="+obj.file_name; swal({ title: "导出成功", type: "success", timer: 3000, showConfirmButton: false }); window.setTimeout(function(){ window.location.reload(); }, 3100); }else{ swal("操作失败", "数据异常,请刷新页面重试", "error"); } },error:function errorMsg(){ swal({ title: "操作提示:", text:"抱歉:网络故障,导出excel数据出现异常,请重新导出操作!", showCancelButton: true, closeOnConfirm: true, confirmButtonText: "确认", confirmButtonColor: "#DD6B55", cancelButtonText: "关闭", }, function(index) { if(index==false||index==true){ window.location.reload(); } }); } }); }).on("click",".owner_export_qx",function(){ $(".ownerExport_div").hide(); });