要被打死的,一個Excel的匯出我寫了一百多行程式碼
阿新 • • 發佈:2019-01-30
反正都要被打死,所以把這個例子記下來吧,一個學習的辛苦歷程!
/** * 匯出Excel * @param request 請求物件 * @param response 相應物件 * @return * @throws Exception 匯出異常 */ @GetMapping("/download") public RestResult downloadExcel(HttpServletRequest request, HttpServletResponse response) throws Exception { //初始整個Excel HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); //建立一個表格 HSSFSheet createSheet = hssfWorkbook.createSheet("藥品資訊資料表"); //設定單元格風格 PoiUtil poiUtil = new PoiUtil(); //設定標題風格 HSSFCellStyle cs = hssfWorkbook.createCellStyle(); //設定單元格 cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 cs.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下邊框 cs.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 cs.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 cs.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 //設定字型 HSSFFont createFont = hssfWorkbook.createFont(); createFont.setFontHeight((short)300); createFont.setFontName("黑體"); createFont.setCharSet(HSSFFont.DEFAULT_CHARSET); createFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); cs.setFont(createFont); //設定一級單元格風格 HSSFCellStyle cs1 = hssfWorkbook.createCellStyle(); cs1.setAlignment(HSSFCellStyle.ALIGN_CENTER); cs1.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下邊框 cs1.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 cs1.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 cs1.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 HSSFFont createFont1 = hssfWorkbook.createFont(); createFont1.setFontHeight((short)260); createFont1.setFontName("宋體"); cs1.setFont(createFont1); //設定二級單元格風格 HSSFCellStyle cs2 = hssfWorkbook.createCellStyle(); cs2.setAlignment(HSSFCellStyle.ALIGN_CENTER); cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下邊框 cs2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 cs2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 cs2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 HSSFFont createFont2 = hssfWorkbook.createFont(); createFont2.setFontHeight((short)220); createFont2.setFontName("宋體"); cs2.setFont(createFont2); //獲取資料庫的資料確定需要多少行 List<DrugInfo> findAll = drugInfoService.findAll(); HSSFRow createRowTitle = createSheet.createRow(1); //設定高寬40px createRowTitle.setHeight((short)(15.625*40)); createRowTitle.setHeightInPoints(30f); for (int i = 2; i <7; i++) { HSSFCell createCell1 = createRowTitle.createCell(i); createCell1.setCellStyle(cs); createCell1.setCellValue("藥品資訊資料表"); createSheet.autoSizeColumn(i); createSheet.addMergedRegion(new Region(1, (short)2, 1, (short)6)); //createSheet.addMergedRegion(new CellRangeAddress(0,0,2,7)); } HSSFRow createRowTop = createSheet.createRow(2); createRowTop.setHeight((short)(15.625*25)); createRowTop.setHeightInPoints(20f); HSSFCell createCell2 = createRowTop.createCell(2); createCell2.setCellValue("藥品狀態"); createCell2.setCellStyle(cs1); createSheet.autoSizeColumn(2); HSSFCell createCell3 = createRowTop.createCell(3); createCell3.setCellValue("批准文號"); createCell3.setCellStyle(cs1); createSheet.autoSizeColumn(3); HSSFCell createCell4 = createRowTop.createCell(4); createCell4.setCellValue("商品名稱(中)"); createCell4.setCellStyle(cs1); createSheet.autoSizeColumn(4); HSSFCell createCell5 = createRowTop.createCell(5); createCell5.setCellValue("商品名稱(中)"); createCell5.setCellStyle(cs1); createSheet.autoSizeColumn(5); HSSFCell createCell6 = createRowTop.createCell(6); createCell6.setCellValue("規格"); createCell6.setCellStyle(cs1); createSheet.autoSizeColumn(6); //建立行 for (int rowIndex = 0; rowIndex < findAll.size(); rowIndex++) { HSSFRow createRow = createSheet.createRow(rowIndex+3); DrugInfo drugInfo = findAll.get(rowIndex); createRow.setHeight((short)(15.625*30)); createRow.setHeightInPoints(20f); //建立列 for (int columnIndex = 0; columnIndex < 7; columnIndex++) { HSSFCell createCell = createRow.createCell(columnIndex); //設定風格 switch (columnIndex) { case 2: createCell.setCellValue(drugInfo.getProductionStatus()); createCell.setCellStyle(cs2); createSheet.autoSizeColumn(2); break; case 3: createCell.setCellValue(drugInfo.getLicence()); createCell.setCellStyle(cs2); createSheet.autoSizeColumn(3); break; case 4: createCell.setCellValue(drugInfo.getDrugName()); createCell.setCellStyle(cs2); createSheet.autoSizeColumn(4); break; case 5: createCell.setCellValue(drugInfo.getDrugProductName()); createCell.setCellStyle(cs2); createSheet.autoSizeColumn(5); break; case 6: createCell.setCellValue(drugInfo.getDrugSpec()); createCell.setCellStyle(cs2); createSheet.autoSizeColumn(6); break; } } } // 告訴瀏覽器用什麼軟體可以開啟此檔案 response.setHeader("content-Type", "application/vnd.ms-excel"); // 下載檔案的預設名稱 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("藥品資訊資料表","UTF-8") + ".xls"); //編碼 response.setCharacterEncoding("UTF-8"); hssfWorkbook.write(response.getOutputStream()); /*ExportParams params = new ExportParams() ; params.setSheetName("第一頁"); ; params.setTitle("藥品資訊資料"); params.setSecondTitle("匯出日期:"+new Date()); // 告訴瀏覽器用什麼軟體可以開啟此檔案 response.setHeader("content-Type", "application/vnd.ms-excel"); // 下載檔案的預設名稱 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("藥品資訊資料表","UTF-8") + ".xls"); //編碼 response.setCharacterEncoding("UTF-8"); List<DrugInfo> findAll = drugInfoService.findAll(); Workbook workbook = ExcelExportUtil.exportExcel(params, DrugInfo.class, findAll); CellStyle createCellStyle = workbook.createCellStyle(); createCellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); workbook.write(response.getOutputStream());*/ return ResultGenerator.genSuccessResult().setMessage("匯出成功"); }
程式碼還未做優化,下次要做poi匯出就簡單多了!