JAVA報表開發-POI處理EXCEL-匯出(簡單樣式進階)
阿新 • • 發佈:2022-05-28
一、匯出時樣式的設定
如果要求匯出的excel如下內容:
1、通過上圖可以看出有些樣式需要我們來設定,來看一下都有哪些知識點:
1.畫框線
/** * 設定框線 */ HSSFCellStyle contentStyle = book.createCellStyle(); contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//底線 contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//頂部線 contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左側線 contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右側線
2、合併單元格
//合併單元格 起始行, 結束行, 起始列, 結束列 sheet.addMergedRegion(new CellRangeAddress(0,0,0,4));
3、設定行高
/** 設定行高 */ sheet.getRow(1).setHeight((short)500);
4、設定表格的對齊方式和字型
//*設定對齊方式和字型***/ //內容部分的樣式 style_content.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設定水平居中 style_content.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設定垂直居中 HSSFFont font = book.createFont();//建立字型 font.setFontName("宋體");//設定字型名稱 font.setFontHeightInPoints((short)11);//設定字型大小 style_content.setFont(font);//對樣式設定字型 //標題樣式 HSSFCellStyle style_title = book.createCellStyle();//建立標題樣式style_title.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設定水平居中 style_title.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設定垂直居中 HSSFFont titleFont = book.createFont();//設定標題字型 titleFont.setFontName("黑體"); titleFont.setBold(true);//加粗 titleFont.setFontHeightInPoints((short)18);//字型大小 style_title.setFont(titleFont);//將標題字型設定到標題樣式 sheet.getRow(0).getCell(0).setCellStyle(style_title);//單元格設定標題樣式
二、程式碼
public void downLoadXlsxWithStyle(HttpServletResponse response) throws Exception { Workbook workbooks = new XSSFWorkbook(); Sheet sheet = workbooks.createSheet("有樣式的excel"); //需求:1、邊框線:全邊框 2、行高 :42 列寬 3、合併單元格:第1行的第1個單元格到第5個單元格 4、對齊方式:水平垂直都要居中 5、字型:黑體18號字 //1、邊框線:全邊框 CellStyle bigTitleRowCellStyle = workbooks.createCellStyle(); bigTitleRowCellStyle.setBorderLeft(BorderStyle.THIN);//左邊框 THIN 細線 bigTitleRowCellStyle.setBorderBottom(BorderStyle.THIN);//下邊框 bigTitleRowCellStyle.setBorderTop(BorderStyle.THIN);//上邊框 bigTitleRowCellStyle.setBorderRight(BorderStyle.THIN);//右邊框 //4、對齊方式:水平垂直都要居中 bigTitleRowCellStyle.setAlignment(HorizontalAlignment.CENTER); //水平居中對齊 bigTitleRowCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直居中對齊 //5、字型 Font font = workbooks.createFont(); font.setFontName("黑體"); font.setFontHeightInPoints((short)18); //把字型放入到樣式中 bigTitleRowCellStyle.setFont(font); Row bigTitleRow = sheet.createRow(0); //2、行高 列寬 bigTitleRow.setHeightInPoints(42);//設定行高 //設定列寬 sheet.setColumnWidth(0,5*256); //1代表的是一個標準字母寬度的256分之一 sheet.setColumnWidth(1,8*256); sheet.setColumnWidth(2,15*256); sheet.setColumnWidth(3,15*256); sheet.setColumnWidth(4,30*256); for (int i = 0; i <5 ; i++) { Cell cell = bigTitleRow.createCell(i); cell.setCellStyle(bigTitleRowCellStyle); } //合併單元格 sheet.addMergedRegion(new CellRangeAddress(0,0,0,4));//int firstRow 起始行, int lastRow 結束行, int firstCol 開始列, int lastCol 結束列 //向指定的單元格放入資料 sheet.getRow(0).getCell(0).setCellValue("稽核資訊"); /** * 處理小標題 */ //需求:1、邊框線:全邊框 2、行高 :42 列寬 3、合併單元格:第1行的第1個單元格到第5個單元格 4、對齊方式:水平垂直都要居中 5、字型:黑體18號字 //1、邊框線:全邊框 CellStyle littleRowCellStyle = workbooks.createCellStyle(); //樣式克隆 littleRowCellStyle.cloneStyleFrom(bigTitleRowCellStyle); //5、字型 Font littleFont = workbooks.createFont(); littleFont.setFontName("宋體"); littleFont.setFontHeightInPoints((short)12); littleFont.setBold(true); littleRowCellStyle.setFont(littleFont); //1、邊框線:全邊框 CellStyle contentRowCellStyle = workbooks.createCellStyle(); //樣式克隆 contentRowCellStyle.cloneStyleFrom(bigTitleRowCellStyle); contentRowCellStyle.setAlignment(HorizontalAlignment.LEFT); Font contentFont = workbooks.createFont(); contentFont.setFontName("楷體"); contentFont.setFontHeightInPoints((short)8); contentFont.setBold(true); //把字型放入到樣式中 contentRowCellStyle.setFont(contentFont); Row tittleRow = sheet.createRow(1); String [] titles = new String[]{"編號","姓名","手機號","入職日期","現住址"}; Cell cell = null; for (int i = 0; i < 4; i++) { cell=tittleRow.createCell(i);//建立單元格 列 cell.setCellValue(titles[i]);//寫入內容 cell.setCellStyle(contentRowCellStyle); } SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd"); List<User> userList = userMapper.selectAll(); int rowIndex=1; for (User user : userList) { Row row = sheet.createRow(rowIndex); //建立行 cell = row.createCell(0); //建立列 cell.setCellValue(user.getId()); cell.setCellStyle(contentRowCellStyle); cell = row.createCell(1); cell.setCellValue(user.getUserName()); cell.setCellStyle(contentRowCellStyle); cell = row.createCell(2); cell.setCellValue(user.getPhone()); cell.setCellStyle(contentRowCellStyle); cell = row.createCell(3); cell.setCellValue(simpleDateFormat.format(user.getHireDate())); cell.setCellStyle(contentRowCellStyle); cell = row.createCell(4); cell.setCellValue(user.getAddress()); cell.setCellStyle(contentRowCellStyle); rowIndex++; } //檔案匯出 一個流(outputStream)兩個頭(檔案的開啟方式 in-line attachement, 檔案的下載時mime型別) String filename="員工資料.xlsx"; response.setHeader("content-disposition","attachment;filename="+new String(filename.getBytes(),"ISO8859-1")); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); workbooks.write(response.getOutputStream()); }