1、js方法
function exporterExcel(){ var no=$("#serchNo").val(); var machineImei=$("#serchMachineImei").val(); var orderNo=$("#serchOrderNo").val(); var status=$("#serchStatus").val(); var dealResult=$("#serchDealResult").val(); var url="../saleAfterMaintainAction/exporterExcel.shtml?queryParam['no']="+no+"&queryParam['machineImei']="+machineImei+"&queryParam['orderNo']="+orderNo+"&queryParam['status']="+status+"&queryParam['dealResult']="+dealResult; window.open(url); }
2、Action
@RequestMapping(value = "/exporterExcel") @ResponseBody public ResultVO exportExcel(QueryVO queryVO, HttpServletRequest request, HttpServletResponse response) { saleAfterMaintainService.exportExcel(queryVO, request, response); return success("导出成功"); }
3、Service
public void exportExcel(QueryVO queryVO, HttpServletRequest req, HttpServletResponse res) { int totalCount = saleAfterMaintainDao.queryCount(queryVO);//数据库查询数据条数 int rows=10; long start = System.currentTimeMillis(); try { LinkedHashMap<String, String> headMap = new LinkedHashMap<String, String>(); headMap.put("no", "保修单号"); headMap.put("name", "姓名"); headMap.put("tel", "电话"); headMap.put("address", "地址"); headMap.put("reason", "保修原因"); headMap.put("machineImei", "设备IMEI"); headMap.put("orderNo", "对应订单号"); headMap.put("status", "状态"); headMap.put("dealResult", "处理结果"); headMap.put("createTime", "创建时间"); // 开始excel生成 SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sh = wb.createSheet(); // 表格样式 CellStyle cellStyle = ExportExcel.getContentStyle(wb); // 设置表格宽度 setShColumnWidth(sh); // 循环数据 Row row = sh.createRow(0); int headNum = 0; for (String key : headMap.keySet()) { Cell cell = row.createCell(headNum); cell.setCellValue(headMap.get(key)); cell.setCellStyle(cellStyle); headNum++; } rows = 1000; int pageCount = totalCount % rows == 0 ? totalCount / rows : totalCount / rows + 1; int rowNum = 1; for (int i = 0; i < pageCount; i++) { List<Map<String, Object>> pageList = saleAfterMaintainDao.findPageReturn(queryVO, pageCount, rows);//数据库查询数据 for (Map<String, Object> map : pageList) { row = sh.createRow(rowNum); int index = 0; for (String key : headMap.keySet()) { Cell cell = row.createCell(index); ExportExcel.setCellValue(cell, map, key); cell.setCellStyle(cellStyle); index++; } rowNum++; } } String prePath = req.getSession().getServletContext().getRealPath("/"); File file = new File(prePath); if (!file.exists()) file.mkdirs(); String filePath = prePath + "保修单.xlsx"; FileOutputStream out = new FileOutputStream(filePath); wb.write(out); out.close(); wb.dispose(); ExportExcel.openExcel(req, res, "保修单.xlsx"); LogUtil.writeLog("导出excel的时间:" + (System.currentTimeMillis() - start) / 1000 + "秒"); } catch (Exception e) { LogUtil.writeErrorLog(e.getMessage(), e); } } /** * 设置表格的宽度 * * @param sh */ private void setShColumnWidth(Sheet sh) { sh.setColumnWidth(0, 6000); sh.setColumnWidth(1, 4000); sh.setColumnWidth(2, 4000); sh.setColumnWidth(3, 4000); sh.setColumnWidth(4, 5000); sh.setColumnWidth(5, 5000); sh.setColumnWidth(6, 3000); sh.setColumnWidth(7, 2000); sh.setColumnWidth(8, 5000); sh.setColumnWidth(9, 2000); sh.setColumnWidth(10, 4000); sh.setColumnWidth(11, 6000); sh.setColumnWidth(12, 5000); sh.setColumnWidth(13, 5000); sh.setColumnWidth(14, 5000); sh.setColumnWidth(15, 5000); sh.setColumnWidth(16, 4000); sh.setColumnWidth(17, 5000); }
4、ExportExcel 类
package com.xg.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import com.pay.util.LogUtil; import com.xg.dao.BaseDao; import com.xg.framework.vo.query.QueryVO; public class ExportExcel { /** * 弹出打开框 * * @param request * @param response * @param downName */ public static void openExcel(HttpServletRequest request, HttpServletResponse response, String downName) { BufferedInputStream bis = null; BufferedOutputStream bos = null; String filepath = null; try { filepath = request.getSession().getServletContext().getRealPath("/") + downName; bis = new BufferedInputStream(new FileInputStream(new File(filepath))); bos = new BufferedOutputStream(response.getOutputStream()); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(downName, "utf-8")); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead); } bos.flush(); } catch (FileNotFoundException e) { LogUtil.writeErrorLog(e.getMessage(), e); } catch (IOException e) { LogUtil.writeErrorLog(e.getMessage(), e); } finally { if (null != bis) try { bis.close(); } catch (IOException e) { LogUtil.writeErrorLog(e.getMessage(), e); } if (null != bos) try { bos.close(); } catch (IOException e) { LogUtil.writeErrorLog(e.getMessage(), e); } new File(filepath).delete(); } } public static CellStyle getContentStyle(SXSSFWorkbook wb) { CellStyle cellStyle = wb.createCellStyle(); cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 下边框 cellStyle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框 cellStyle.setBorderTop(CellStyle.BORDER_THIN);// 上边框 cellStyle.setBorderRight(CellStyle.BORDER_THIN);// 右边框 cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 水平居中 cellStyle.setAlignment(CellStyle.VERTICAL_CENTER); // 垂直居中 Font font = wb.createFont(); font.setFontName("宋体");// 设置字体 font.setFontHeightInPoints((short) 10);// 设置字体大小 cellStyle.setFont(font); return cellStyle; } /** * 表格赋值 * * @param cell * @param map * @param key */ public static void setCellValue(Cell cell, Map<String, Object> map, String key) { Object value = map.get(key); if (value == null) { cell.setCellValue(""); } else if (value instanceof Double) { cell.setCellValue(((Double) value).doubleValue()); } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); cell.setCellValue(sdf.format(date)); } else { String reg = "^\\d+$"; String keyValue = value.toString(); boolean isNum = keyValue.matches(reg); if (isNum) { cell.setCellValue(Double.valueOf(keyValue)); } else { cell.setCellValue(value.toString()); } } } /** * excel导出 * * @param excelWith * * @param machineComboOrderDao * @param queryVO * @param req * @param res * @param headMap * @param excelName * @throws FileNotFoundException * @throws IOException */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void doExportData(BaseDao baseDao, int[] excelWith, QueryVO queryVO, HttpServletRequest req, HttpServletResponse res, LinkedHashMap<String, String> headMap, String excelName) throws FileNotFoundException, IOException { // 总条数 int totalCount = baseDao.queryCount(queryVO); int rows = 10; long start = System.currentTimeMillis(); // 开始excel生成 SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sh = wb.createSheet(); // 表格样式 CellStyle cellStyle = getContentStyle(wb); // 设置表格宽度 setShColumnWidth(sh, excelWith); // 循环数据 Row row = sh.createRow(0); int headNum = 0; for (String key : headMap.keySet()) { Cell cell = row.createCell(headNum); cell.setCellValue(headMap.get(key)); cell.setCellStyle(cellStyle); headNum++; } rows = 1000; int pageCount = totalCount % rows == 0 ? totalCount / rows : totalCount / rows + 1; int rowNum = 1; for (int i = 0; i < pageCount; i++) { List<Map<String, Object>> pageList = baseDao.findPageReturn(queryVO, pageCount, rows); for (Map<String, Object> map : pageList) { row = sh.createRow(rowNum); int index = 0; for (String key : headMap.keySet()) { Cell cell = row.createCell(index); ExportExcel.setCellValue(cell, map, key); cell.setCellStyle(cellStyle); index++; } rowNum++; } } String prePath = req.getSession().getServletContext().getRealPath("/"); File file = new File(prePath); if (!file.exists()) file.mkdirs(); String filePath = prePath + excelName; FileOutputStream out = new FileOutputStream(filePath); wb.write(out); out.close(); wb.dispose(); openExcel(req, res, excelName); LogUtil.writeLog("导出excel的时间:" + (System.currentTimeMillis() - start) / 1000 + "秒");//记入日志 } /** * 设置表格宽度 * * @param sh * @param excelWith */ private static void setShColumnWidth(Sheet sh, int[] excelWith) { for (int i = 0; i < excelWith.length; i++) { sh.setColumnWidth(i, excelWith[i]); } } }
5、jar包
poi-examples-3.13-20150929.jar
poi-excelant-3.13-20150929.jar
poi-ooxml-3.13-20150929.jar
poi-ooxml-schemas-3.13-20150929.jar
poi-scratchpad-3.13-20150929.jar