特点 列出List中要导入到Excel的列名#中文名,然后就完事了。具体的看看main()你就知道有多简单了。
利用POI,本工具类可以实现Excel导出和下载,话不多说,放码过来。
1package com.fantong.ois.wms.utils; 2 3import org.apache.poi.hssf.usermodel.*; 4import org.apache.poi.hssf.util.HSSFColor; 5 6import java.io.FileOutputStream; 7import java.io.IOException; 8import java.io.OutputStream; 9import java.math.BigDecimal; 10import java.util.ArrayList; 11import java.util.HashMap; 12import java.util.List; 13import java.util.Map; 14 15/** 16 * 导出或下载Excel, 17 * Title: ExportXls<br> 18 * Description: 用#分割列与转义标题 ;标题包含*表示需要过滤该列<br> 19 * @author xiaour@github.com 20 * @createDate 2016年5月31日 21 * @version v1.0 22 */ 23public class ExportXls { 24 25 private OutputStream out;//传入OutputStream表示写入到服务器,传入HttpServletResponse则直接下载 26 27 private static String tag="#";//标题与字段分割符 28 private static String hidden="*";//隐藏标识符 29 30 public ExportXls(OutputStream out) { 31 super(); 32 this.out = out; 33 } 34 35 /** 36 * 37 *@category 38 *@throws IOException 39 *@createDate 2016年5月31日 40 * @param sheetName 41 * @param titles 字段名#中文列名 42 * @param list 43 * */ 44 @SuppressWarnings({"deprecation" }) 45 public void exportExcel(String sheetName, String[] titles, List<Map<String, Object>> list) throws IOException { 46 // 声明一个工作薄 47 @SuppressWarnings("resource") 48 HSSFWorkbook workbook = new HSSFWorkbook(); 49 // 生成一个表格 50 HSSFSheet sheet = workbook.createSheet(sheetName); 51 // 设置表格默认列宽度为15个字节 52 sheet.setDefaultColumnWidth((short) 20); 53 // 生成一个样式 54 HSSFCellStyle style = workbook.createCellStyle(); 55 // 设置这些样式 56 style.setFillForegroundColor(HSSFColor.TEAL.index); 57 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 58 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); 59 style.setBorderLeft(HSSFCellStyle.BORDER_THIN); 60 style.setBorderRight(HSSFCellStyle.BORDER_THIN); 61 style.setBorderTop(HSSFCellStyle.BORDER_THIN); 62 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); 63 // 生成一个字体 64 HSSFFont font = workbook.createFont(); 65 font.setColor(HSSFColor.WHITE.index); 66 font.setFontHeightInPoints((short) 14); 67 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 68 // 把字体应用到当前的样式 69 style.setFont(font); 70 //产生表格标题行 71 HSSFRow row = sheet.createRow(0); 72 sheet.createFreezePane( 0, 1, 0, 1 ); 73 for (int i = 0; i < titles.length; i++) { 74 if(titles[i].indexOf(hidden)<0){ 75 HSSFCell cell = row.createCell(i); 76 cell.setCellStyle(style); 77 HSSFRichTextString text=null; 78 if(titles[i].indexOf(tag)>0){ 79 text = new HSSFRichTextString(titles[i].split(tag)[1]); 80 }else { 81 text = new HSSFRichTextString(titles[i]); 82 } 83 cell.setCellValue(text); 84 } 85 } 86 String value=""; 87 for(int j=1;j<list.size()+1;j++){ 88 Map<String, Object> map=list.get(j-1); 89 row = sheet.createRow(j); 90 for(int s=0;s<titles.length;s++){ 91 if(titles[s].indexOf(hidden)<0){ 92 HSSFCell txtCell = row.createCell(s); 93 if(map!=null){ 94 Object obj=null; 95 96 if(titles[s].indexOf(tag)>0){ 97 obj=map.get(titles[s].split(tag)[0]); 98 }else { 99 obj=map.get(titles[s]); 100 } 101 String temp=obj!=null?obj.toString():""; 102 value= temp.toString(); 103 } 104 HSSFRichTextString text2 = new HSSFRichTextString(value); 105 txtCell.setCellValue(text2); 106 } 107 } 108 } 109 110 111 workbook.write(out); 112 out.flush(); 113 out.close(); 114 115 } 116 117 public static void main(String[] args) throws Exception { 118 119 //写入本地 120 OutputStream out = new FileOutputStream("d://1432026362899.xls"); 121 ExportXls ex = new ExportXls(out); 122 String [] headers={"A#标题1","B#标题2","C#标题3*"}; 123 124 List<Map<String,Object>> dataList= new ArrayList<Map<String,Object>>(); 125 for(int j=0;j<headers.length;j++){ 126 Map<String,Object> map= new HashMap<String,Object>(); 127 map.put("A",j+1); 128 map.put("B",new BigDecimal("580.63")); 129 map.put("C",null); 130 dataList.add(map); 131 } 132 133 ex.exportExcel("TEST",headers,dataList); 134 out.close(); 135 System.out.println("excel导出成功!"); 136 137 } 138 139}
上面有测试类可以直接导出到本地,下面看看怎么直接打开连接就下载吧!
1 @ResponseBody 2 @RequestMapping(value = "/download", method = { RequestMethod.GET, RequestMethod.POST }) 3 public void download(HttpServletResponse response){ 4 try { 5 6 response.setContentType("application/x-msdownload"); 7 8 response.setHeader("Content-Disposition", "attachment; filename='xiaour@github.com.xls'"); 9 10 response.setCharacterEncoding("utf-8"); 11 12 //可以将output输出到服务器 13 OutputStream outputStream=response.getOutputStream(); 14 15 ExportXls ex = new ExportXls(outputStream); 16 17 String [] headers={"id#编号","name#名称","operation_time#最近更新时间"}; 18 19 ex.exportExcel("报表",headers,dataList); 20 21 } 22 23 } catch (Exception e) { 24 logger.error(e); 25 } 26 }