封裝的一個簡單的導出excel的方法,很整潔簡單
javaweb導出excel方法,后台controller:
@Action("exportVpn")
public void exportVpn() throws IOException {
//list數據,我這里放的是map,有序的linkedHashMap,如果用的是實體類要自己改下
List<LinkedHashMap> list = new ArrayList<LinkedHashMap>();
LinkedHashMap linkedHashMap = new LinkedHashMap();
linkedHashMap.put("a", "1111");
linkedHashMap.put("b", "2222");
linkedHashMap.put("c", "3333");
list.add(linkedHashMap);
//表頭所有欄的名稱
StringBuffer sbExceHeader = new StringBuffer();
sbExceHeader.append("資源名稱,");
sbExceHeader.append("資源描述,");
sbExceHeader.append("資源類型,");
sbExceHeader.append("協議類型,");
sbExceHeader.append("應用程序路徑,");
sbExceHeader.append("資源組名稱,");
sbExceHeader.append("地址信息,");
sbExceHeader.append("允許的客戶端");
String[] excelHeader = sbExceHeader.toString().split(",");
//創建工作表,並寫入數據到工作表wb
HSSFWorkbook wb = myExportExcel(list, excelHeader, "rclist");
String fileName = "test123.xlsx";//導出的excel文件名
//response怎么獲取都行,只要能拿到,我們公司這是封裝好的用ServletActionContent全局調用出response
HttpServletResponse response = ServletActionContext.getResponse();//獲取response,並設置response格式
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename="+fileName);//文件名
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}
/**導出excel,參數list有序map數據,表頭欄名稱,sheet表名*/ private HSSFWorkbook myExportExcel(List<LinkedHashMap> list, String[] excelHeader, String sheetName){ // String[] excelHeader = { "Sno", "Name", "Age"};//表頭 HSSFWorkbook wb = new HSSFWorkbook(); if(UtilFunc.isBlank(sheetName)){ sheetName = "sheet1"; } HSSFSheet sheet = wb.createSheet(sheetName);//設備sheet表名稱 HSSFRow row = sheet.createRow((int) 0); HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); for (int i = 0; i < excelHeader.length; i++) {//循環表頭 HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); sheet.autoSizeColumn(i); // sheet.SetColumnWidth(i, 100 * 256); } //==============================循環寫入數據========================== for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); // Student student = list.get(i); // row.createCell(0).setCellValue("111"); // row.createCell(1).setCellValue("222"); // row.createCell(2).setCellValue("333"); int column = 0;//循環每列數據 LinkedHashMap<String, String> mParam = (LinkedHashMap) list.get(i); for (String key:mParam.keySet()) { String value = mParam.get(key);// row.createCell(column).setCellValue(value); column++; } } return wb; }
web頁面怎么調用呢,直接用get請求就可以了,連ajax都不用
//點擊按鈕,觸發方法 function exportExcel() { location.href ="${rootPath}/park/network/exportVpn.action"; }
》》》》》》》》》》》》》》下面是導出*.csv文件》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
寫了一個通用的導出csv文件方法:(注意導出csv文件與excel有點不同,導出csv用CsvWriter這個類,而excel用HSSFWorkbook)
這個方法是不包含表頭的,用cw.write直接寫入一行字符串用,號分隔,每個逗號就是一個單元格,換行可直接在字符串中用\n,不過用list更直接,list中的每個對象就是一行數據
/** * csv Write line * * @param csvLine * csv line * @throws IOException IOException */ private void exportCsvFile(List<String> csvLine) throws IOException { HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("application/csv;charset=GBK"); response.setHeader("Content-Disposition", "inline; filename=repost.csv"); // List<String> csvList2 = new ArrayList<String>();//測試數據 // csvList2.add("測試111,B111"); // csvList2.add("測試222,B222"); // csvList2.add("測試333,B333"); //創建csv對象:javaweb頁面導出csv文件,如果是java直接生成指定地址用這個:CsvWriter cw = new CsvWriter(new PrintWriter(file)); CsvWriter cw = new CsvWriter(response.getWriter()); cw.write(csvLine); cw.flush(); cw.close(); }