1. 程式人生 > 其它 >JAVA報表開發-POI處理EXCEL-匯出(簡單樣式進階)

JAVA報表開發-POI處理EXCEL-匯出(簡單樣式進階)

一、匯出時樣式的設定

如果要求匯出的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());
    }