2019年1月4日
阿新 • • 發佈:2019-01-04
1月3日 修改了一天bug 主要是之前程式碼作者有點兒問題 進行了優化,還有一些業務上的修改
有一個關於匯出excel的問題
//js 程式碼 var form = $("<form>");//定義一個form表單 form.attr('style', 'display:none');//設定為不展示 form.attr('target', ''); form.attr('method', 'post'); form.attr('action', url);//url為後臺請求的地址 //引數以input的方式 放入form中 params :{key:value} for(var key in params){ form.append( "<input type='hidden' name='" + key + "' value='" + params[key] + "' />" ); } $('body').append(form);//將表單放置在web中 form.submit();//表單提交 form.remove();//下載完成之後 刪除form 後臺程式碼就不贅述了 不過有一點 String fileName = "測試"; fileName=URLEncoder.encode(fileName,"UTF-8"); response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1")+".xls"); //有一些瀏覽器下載的時候會出現檔名稱會出現亂碼情況 //可以先把fileName編碼 然後再getBytes 再轉換成iso-8859-1 //這樣就可以解決亂碼 當然可能還會出現其他亂碼 那我暫時沒遇到~
下邊是一個excel簡單匯出的util類 可能存在很多不足 但是基本的應用倒是沒問題
/** 這是一個excel簡單匯出的util類 * Created by Lm */ public class ExportMapExcel { /** * * @param title sheet頁名稱 * @param headersName 表格頭名稱 * @param headersId 表格頭對應資料中Map的key * @param dtoList 資料 * @param fileName 匯出檔名稱 * @param response */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void exportExcel(String title, List<String> headersName, List<String> headersId, List<Map<String, Object>> dtoList,String fileName,HttpServletResponse response) { /* (一)表頭--標題欄 */ Map<Integer, String> headersNameMap = new HashMap<Integer, String>(); int key = 0; for (int i = 0; i < headersName.size(); i++) { if (!headersName.get(i).equals(null)) { headersNameMap.put(key, headersName.get(i)); key++; } } /* (二)欄位---標題的欄位 */ Map<Integer, String> titleFieldMap = new HashMap<Integer, String>(); int value = 0; for (int i = 0; i < headersId.size(); i++) { if (!headersId.get(i).equals(null)) { titleFieldMap.put(value, headersId.get(i)); value++; } } /* (三)宣告一個工作薄:包括構建工作簿、表格、樣式 */ HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(title); sheet.setDefaultColumnWidth(15); // 生成一個樣式 HSSFCellStyle style = wb.createCellStyle(); HSSFRow row = sheet.createRow(0); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFCell cell; Collection c = headersNameMap.values();//拿到表格所有標題的value的集合 Iterator<String> headersNameIt = c.iterator();//表格標題的迭代器 /* (四)匯出資料:包括匯出標題欄以及內容欄 */ //根據選擇的欄位生成表頭--標題 int size = 0; while (headersNameIt.hasNext()) { cell = row.createCell(size); cell.setCellValue(headersNameIt.next().toString()); cell.setCellStyle(style); size++; } //表格一行的欄位的集合,以便拿到迭代器 Collection zdC = titleFieldMap.values(); Iterator<Map<String, Object>> titleFieldIt = dtoList.iterator();//總記錄的迭代器 int zdRow = 1;//真正的資料記錄的列序號 while (titleFieldIt.hasNext()) {//記錄的迭代器,遍歷總記錄 Map<String, Object> mapTemp = titleFieldIt.next();//拿到一條記錄 row = sheet.createRow(zdRow); zdRow++; int zdCell = 0; Iterator<String> zdIt = zdC.iterator();//一條記錄的欄位的集合的迭代器 while (zdIt.hasNext()) { String tempField =zdIt.next();//欄位的暫存 if (mapTemp.get(tempField) != null) { Object valueObj = mapTemp.get(tempField); boolean isNum = false; if(valueObj != null && !"".equals(valueObj)){ isNum = valueObj.toString().matches("^(-?\\d+)(\\.\\d+)?$"); } if(isNum){//數字 row.createCell(zdCell).setCellValue(Double.valueOf(StrUtil.ObjToStr(mapTemp.get(tempField))));//寫進excel物件 }else{ row.createCell(zdCell).setCellValue(String.valueOf(mapTemp.get(tempField)));//寫進excel物件 } zdCell++; } } } try { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setCharacterEncoding("utf-8"); fileName=URLEncoder.encode(fileName,"UTF-8"); response.setHeader("Content-disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso-8859-1")+".xls"); OutputStream out = response.getOutputStream(); wb.write(out); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
昨天晚上抽空聽了李智慧老師(《大型網站技術架構核心原理與案例分析》作者)的一個小小直播 ,他說在工作中要有輸出,這個輸出點到了我 ,他說的輸出不是簡簡單單的踏踏實實的上班,他說的輸出的意思是要有一些自己的作品,讓別人可以或者說願意去消費的作品,這樣自己才能進步。 是啊 我工作快三年了 有什麼輸出呢 最多的輸出就是在CSDN寫一些小問題的解決方案 那還是抄來抄去的文章....
輸出這個事情說簡單也簡單,說難也難,我感覺我現在的任務還是要再繼續學習,多看視訊,多看文章,多寫程式碼,多學習。輸出的話,我想繼續寫CSDN,把自己遇到的一些問題和解決方案拿出來分享一下,這也算是一種小小的輸出吧。
聽老師的直播很有感慨,感覺自己還是很差勁的,可能我是那種努力之後才能趕上或者說不至於落後別人的人,但是努力總歸是沒錯的吧。所以呢還是要用閒雜時間來學習、輸出、提升自己。
不生活在安逸區,不做溫水裡的青蛙,要時刻保持頭腦清晰,知道去做什麼,知道該做什麼。