package com.nanometer.smartlab.util; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import javax.faces.context.FacesContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class ExcelUtils { public static HSSFWorkbook exportExcelNew(Map map, List dataList, String name){ HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); Integer total = null; //sheet名字 HSSFSheet sheet = hssfWorkbook.createSheet(name); HSSFRow titlerRow = sheet.createRow(0); int k = 0; for(Map.Entry entry:map.entrySet()){ //表头 titlerRow.createCell(k).setCellValue(entry.getValue()); k++; } //数据 for (int i = 0; i < dataList.size(); i++) { HSSFRow dataRow = sheet.createRow(i + 1); int j = 0; for(Map.Entry entry:map.entrySet()){ //表头 dataRow.createCell(j).setCellValue(dataList.get(i).get(entry.getKey()) == null ? "" : String.valueOf(dataList.get(i).get(entry.getKey()))); j++; } } return hssfWorkbook; } public static void export2Excel(List list, String name, Map map) throws Exception { if (list == null || list.size() == 0) { throw new Exception("没有数据可以导出"); } ServletOutputStream out = null; InputStream is = null; try { FacesContext ctx = FacesContext.getCurrentInstance(); ctx.responseComplete(); String contentType = "application/x-download"; HttpServletResponse response = (HttpServletResponse) ctx .getExternalContext().getResponse(); response.setContentType(contentType); StringBuffer contentDisposition = new StringBuffer(); contentDisposition.append("attachment;"); contentDisposition.append("filename=\""); contentDisposition.append(name).append(".xls"); contentDisposition.append("\""); response.setHeader( "Content-Disposition", new String(contentDisposition.toString().getBytes( System.getProperty("file.encoding")), "ISO8859-1")); out = response.getOutputStream(); HSSFWorkbook hssfWorkbook = ExcelUtils.exportExcelNew(map, list, name); hssfWorkbook.write(out); // out.flush(); ctx.responseComplete(); } catch (Exception e) { if (is != null) { try { is.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (out != null) { try { out.close(); } catch (IOException e1) { e1.printStackTrace(); } } e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } }