POI報表打印


一、Excel報表(POI)

1、需求說明

在企業級應用開發中,Excel報表是一種最常見的報表需求。Excel報表開發一般分為兩種形式:
1、為了方便操作,基於Excel的報表批量上傳數據
2、通過java代碼生成Excel報表。
在Saas-Export系統中,也有大量的報表操作,那么接下來的課程就是一起來學習企業級的報表開發

2、Excel報表概述

目前世面上的Excel 分為兩個大的版本Excel2003 和Excel2007 及以上兩個版本;
兩者之間的區別如下:

3、常見的Excel操作工具

Java中常見的用來操作Excl的方式一般有2種:JXL和POI。

  • JXL只能對Excel進行操作,屬於比較老的框架,它只支持到Excel 95-2000的版本。現在已經停止更新和維護。

  • POI是apache的項目,可對微軟的Word,Excel,Ppt進行操作,包括office2003和2007,Excl2003和2007。poi現在一直有更新。所以現在主流使用POI。

4、什么是POI

Apache POI是Apache軟件基金會的開源項目,由Java編寫的免費開源的跨平台的 Java API,Apache POI提供API給Java語言操作Microsoft Office的功能。

Apache POI是目前最流行的操作Microsoft Office的API組件,借助POI可以方便的完成諸如:數據報表生成,數據批量上傳,數據備份等工作

5、POI簡單實現

5.1、搭建環境

創建工程導入坐標:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.0.1</version>
</dependency>

POI 工程結構
HSSF 提供讀寫Microsoft Excel XLS 格式檔案的功能。
XSSF 提供讀寫Microsoft Excel OOXML XLSX 格式檔案的功能。
HWPF 提供讀寫Microsoft Word DOC 格式檔案的功能。
HSLF 提供讀寫Microsoft PowerPoint 格式檔案的功能。
HDGF 提供讀Microsoft Visio 格式檔案的功能。
HPBF 提供讀Microsoft Publisher 格式檔案的功能。
HSMF 提供讀Microsoft Outlook 格式檔案的功能。

5.2、API說明

HSSF提供讀寫Microsoft Excel XLS格式檔案的功能。 2003版本
XSSF提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。2007版本
API名稱 說明
Workbook Excel的文檔對象,針對不同的Excel類型分為:HSSFWorkbook(2003)和XSSFWorkbool(2007)
Sheet Excel的表單
Row Excel的行
Cell Excel的格子單元
Font Excel字體
CellStyle 格子單元樣式

5.2、創建excel

public class PoiTest01 {
​
   /**
    * 創建一個excel
    *      創建excel:
    *          1.創建工作簿
    *          2.創建sheet
    *          3.創建行對象
    *          4.創建單元格
    *          5.對單元格賦值
    *          6.設置樣式
    *          7.下載
    */
   @Test
   public void test() throws Exception {
      //1.創建一個工作簿
      //Workbook wb = new HSSFWorkbook(); //處理excel2003版本      .xls
      Workbook wb = new XSSFWorkbook();//處理excel2007及以上版本    .xlsx
      //new SXSSFWorkbook();// 處理大數據量excel報表對象
      //2.創建sheet
      Sheet sheet = wb.createSheet("abc");
      //3.創建行對象
      Row row = sheet.createRow(1);//接受參數 ,數組下標
      //4.創建單元格
      Cell cell = row.createCell(1);//數組下表
      //5.設置單元格內容
      cell.setCellValue("測試文本");
​
      //設置樣式
      /**
       * 1.創建樣式對象
       * 2.通過樣式對象指定樣式
       * 3.配置單元個樣式
       */
      CellStyle cellStyle = wb.createCellStyle();
      //通過樣式對象指定樣式
      cellStyle.setBorderTop(BorderStyle.THIN); //細線
      cellStyle.setBorderBottom(BorderStyle.THIN); //細線
      cellStyle.setBorderLeft(BorderStyle.THIN); //細線
      cellStyle.setBorderRight(BorderStyle.THIN); //細線
//字體 對象
      Font font = wb.createFont();
      font.setFontName("華文行楷");
      font.setFontHeightInPoints((short)26);//字號
​
      cellStyle.setFont(font);
      cell.setCellStyle(cellStyle);
​
      //指定行高和列寬
      sheet.setColumnWidth(1,20*256); //列寬  不准確!!!
      row.setHeightInPoints(30);
​
      //6.將excel保存到本地磁盤中
      FileOutputStream fos = new FileOutputStream("E:\\text.xlsx");
      wb.write(fos);
      fos.close();
   }
}

 

2.3、讀取excel

public static void main(String[] args) throws Exception {
        //1.根據Excel 文件創建工作簿
        Workbook wb = new XSSFWorkbook("C:\\demo.xlsx");
        //2.獲取Sheet
        Sheet sheet = wb.getSheetAt(0);//參數:索引
        //3.獲取Sheet 中的每一行,和每一個單元格,小於等於表中有效行的最后一行的行號,POI將行號從0開始
        for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
            Row row = sheet.getRow(rowNum);//根據索引獲取每一個行
            StringBuilder sb = new StringBuilder();
            for (int cellNum = 2; cellNum < row.getLastCellNum(); cellNum++) {
                //根據索引獲取每一個單元格
                Cell cell = row.getCell(cellNum);
                //獲取每一個單元格的內容
                Object value = getCellValue(cell);
                sb.append(value).append("-");
            }
            System.out.println(sb.toString());
        }
    }

    public static Object getCellValue(Cell cell) {
        //1.獲取到單元格的屬性類型
        CellType cellType = cell.getCellType();
        //2.根據單元格數據類型獲取數據,此處注意,cell中的日期格式其實就是數字格式
        Object value = null;
        switch (cellType) {
            case STRING:
                value = cell.getStringCellValue();
                break;
            case BOOLEAN:
                value = cell.getBooleanCellValue();
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    //日期格式
                    value = cell.getDateCellValue();
                } else {
                    //數字
                    value = cell.getNumericCellValue();
                }
                break;
            case FORMULA: //公式
                value = cell.getCellFormula();
                break;
            default:
                break;
        }
        return value;
    }

 POI中有關樣式的設置

 

    //大標題的樣式
    public CellStyle bigTitle(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("宋體");
        font.setFontHeightInPoints((short)16);
        font.setBold(true);//字體加粗
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);                //橫向居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);        //縱向居中
        return style;
    }
    
    //小標題的樣式
    public CellStyle title(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("黑體");
        font.setFontHeightInPoints((short)12);
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);                //橫向居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);        //縱向居中
        style.setBorderTop(BorderStyle.THIN);                        //上細線
        style.setBorderBottom(BorderStyle.THIN);                    //下細線
        style.setBorderLeft(BorderStyle.THIN);                        //左細線
        style.setBorderRight(BorderStyle.THIN);                        //右細線
        return style;
    }

    //文字樣式
    public CellStyle text(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("Times New Roman");
        font.setFontHeightInPoints((short)10);

        style.setFont(font);

        style.setAlignment(HorizontalAlignment.LEFT);                //橫向居左
        style.setVerticalAlignment(VerticalAlignment.CENTER);        //縱向居中
        style.setBorderTop(BorderStyle.THIN);                        //上細線
        style.setBorderBottom(BorderStyle.THIN);                    //下細線
        style.setBorderLeft(BorderStyle.THIN);                        //左細線
        style.setBorderRight(BorderStyle.THIN);                        //右細線

        return style;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM