java中poi進行execl匯出,javapoiexecl匯出
首先貼出最終匯出的execl吧:
前台介面如下:
點擊匯出時,為其按鈕的onclick事件添加exportDate()函數:
function exportDate(){ var begin_Date=$('#dateid').datebox('getValue'); document.getElementById("exportForm").action="../mobileManage/export.do?begin_Date="+begin_Date; document.getElementById("exportForm").submit(); }
在後台export.do的代碼如下:
@RequestMapping("export.do") public void exportExecl(HttpServletRequest request, HttpServletResponse response) { String beginDate = request.getParameter("dateid")+"-01"; int maxDay=getCurrMonthDays(beginDate); List<MobileManage> list = getDataList(beginDate); String title =beginDate.substring(0, 4)+"年"+beginDate.subSequence(5, 7)+"月"+ "員工工作詳情表"; String[] headers1 = new String[33];// 表頭1數組 日期,1,2,3... String[] headers2 = new String[31];// 表頭2數組 星期,一二三... headers1[0]="類型"; headers1[1]="姓名"; for (int i = 1; i <=maxDay; i++) { String date=beginDate.substring(0,8)+(i<10?"0"+i:i+""); String week=getWeek(date); headers1[i+1]=i+""; headers2[i-1]=week; } HSSFWorkbook workbook = new HSSFWorkbook();// 產生一個活頁簿 HSSFSheet sheet = workbook.createSheet(title);//建立一個表 HSSFCellStyle style = workbook.createCellStyle();//建立一個置中格式 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直 sheet.setDefaultColumnWidth(5);//設定預設列寬 sheet.setColumnWidth(0, 10* 256);//設定第一、第二列列寬 sheet.setColumnWidth(1, 10 * 256); sheet.setDefaultRowHeight((short)300);//設定預設行高 HSSFRow row = sheet.createRow(0);//建立表頭一 sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); //設定跨行 sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); HSSFRow rowWeek=sheet.createRow(1);//建立表頭二 HSSFCell cell = null; //給表頭填充資料 for (int i = 0; i < headers1.length; i++) { cell = row.createCell(i); cell.setCellValue(headers1[i]); cell.setCellStyle(style); } for (int i = 0; i < headers2.length; i++) { cell=rowWeek.createCell(i+2); cell.setCellValue(headers2[i]); cell.setCellStyle(style); } // 遍曆集合資料,產生資料行 MobileManage manage = null; int index = 1; // 迴圈寫入行 for (int i = 0; i < list.size(); i++) { index++; row = sheet.createRow(index);//從第二行開始填充資料(第零和一行是表頭) manage = list.get(i); cell = row.createCell(0);// 類型 cell.setCellValue(manage.getType()); cell = row.createCell(1);//姓名 cell.setCellValue(manage.getName()); for (int j = 0; j < headers2.length; j++) {//項目編碼 cell=row.createCell(j+2); cell.setCellValue(manage.getDateCodes()[j]==null?"":manage.getDateCodes()[j].getCode()); } } response.reset(); try { title=new String(title.getBytes("gb2312"),"iso8859-1");//設定表格名時中文亂碼,進行轉碼 } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + title + ".xls"); try { OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } return; }
我在網上看到很多人說這裡面涉及到設定的一般都要加個short強轉,但是我這樣寫在FirefoxGoogle匯出並沒有什麼問題,當然也許不同瀏覽器等或許會出現問題,以後要是遇到了再說吧.