1. 程式人生 > >要被打死的,一個Excel的匯出我寫了一百多行程式碼

要被打死的,一個Excel的匯出我寫了一百多行程式碼

反正都要被打死,所以把這個例子記下來吧,一個學習的辛苦歷程!

/**
	 * 匯出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匯出就簡單多了!