快速學習POI-POI的入門操做

3 POI的入門操做

3.1 搭建環境

<dependencies>
    <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>
</dependencies>

3.2 POI結構說明

  1. HSSF提供讀寫Microsoft Excel XLS格式檔案的功能。
  2. XSSF提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
  3. HWPF提供讀寫Microsoft Word DOC格式檔案的功能。
  4. HSLF提供讀寫Microsoft PowerPoint格式檔案的功能。
  5. HDGF提供讀Microsoft Visio格式檔案的功能。
  6. HPBF提供讀Microsoft Publisher格式檔案的功能。
  7. HSMF提供讀Microsoft Outlook格式檔案的功能。

3.3 API介紹

在這裏插入圖片描述

3.4 基本操做

3.4.1 建立Excel

public class PoiTest01 {
    //測試建立excel文件
    public static void main(String[] args) throws Exception {
        //1.建立workbook工做簿
        Workbook wb = new XSSFWorkbook();
        //2.建立表單Sheet
        Sheet sheet = wb.createSheet("test");
        //3.文件流
        FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
        //4.寫入文件
        wb.write(fos);
        fos.close();
   }
}

3.4.2 建立單元格

//測試建立單元格
    public static void main(String[] args) throws Exception {
        //1.建立workbook工做簿
        Workbook wb = new XSSFWorkbook();
        //2.建立表單Sheet
        Sheet sheet = wb.createSheet("test");
        //3.建立行對象,從0開始
        Row row = sheet.createRow(3);
        //4.建立單元格,從0開始
        Cell cell = row.createCell(0);
        //5.單元格寫入數據
        cell.setCellValue("傳智播客");
        //6.文件流
        FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
        //7.寫入文件
        wb.write(fos);
        fos.close();
   }

3.4.3 設置格式

//建立單元格樣式對象
        CellStyle cellStyle = wb.createCellStyle();
        //設置邊框
        cellStyle.setBorderBottom(BorderStyle.DASH_DOT);//下邊框
        cellStyle.setBorderTop(BorderStyle.HAIR);//上邊框
        //設置字體
        Font font = wb.createFont();//建立字體對象
        font.setFontName("華文行楷");//設置字體
        font.setFontHeightInPoints((short)28);//設置字號
        cellStyle.setFont(font);
        //設置寬高
        sheet.setColumnWidth(0, 31 * 256);//設置第一列的寬度是31個字符寬度
        row.setHeightInPoints(50);//設置行的高度是50個點
        //設置居中顯示
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        //設置單元格樣式
        cell.setCellStyle(cellStyle);
        //合併單元格
        CellRangeAddress  region =new CellRangeAddress(0, 3, 0, 2);
        sheet.addMergedRegion(region);

3.4.4 繪製圖形

//繪製圖形
    public static void main(String[] args) throws Exception {
        //1.建立workbook工做簿
        Workbook wb = new XSSFWorkbook();
        //2.建立表單Sheet
        Sheet sheet = wb.createSheet("test");
        //讀取圖片流
        FileInputStream stream=new FileInputStream("e:\\logo.jpg");
        byte[] bytes= IOUtils.toByteArray(stream);
        //讀取圖片到二進制數組
        stream.read(bytes);
        //向Excel添加一張圖片,並返回該圖片在Excel中的圖片集合中的下標
        int pictureIdx = wb.addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
        //繪圖工具類
        CreationHelper helper = wb.getCreationHelper();
         //建立一個繪圖對象
        Drawing<?> patriarch = sheet.createDrawingPatriarch();
        //建立錨點,設置圖片座標
        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setCol1(0);//從0開始
        anchor.setRow1(0);//從0開始
        //建立圖片
        Picture picture = patriarch.createPicture(anchor, pictureIdx);
        picture.resize();
        //6.文件流
        FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
        //7.寫入文件
        wb.write(fos);
        fos.close();
   }

3.4.5 加載Excel

public class PoiTest06 {
    //單元格樣式
    public static void main(String[] args) throws Exception {
        //1.建立workbook工做簿
        Workbook wb = new XSSFWorkbook("E:\\demo.xlsx");
        //2.獲取sheet 從0開始
        Sheet sheet = wb.getSheetAt(0);
        int totalRowNum = sheet.getLastRowNum();
        Row row = null;
        Cell cell = null;
        //循環全部行
        for (int rowNum = 3; rowNum <sheet.getLastRowNum(); rowNum++) {
            row = sheet.getRow(rowNum);
            StringBuilder sb = new StringBuilder();
            //循環每行中的全部單元格
            for(int cellNum = 2; cellNum < row.getLastCellNum();cellNum++) {
                cell = row.getCell(cellNum);
                sb.append(getValue(cell)).append("-");
           }
            System.out.println(sb.toString());
       }
   }
    //獲取數據
    private static Object getValue(Cell cell) {
        Object value = null;
        switch (cell.getCellType()) {
            case STRING: //字符串類型
                value = cell.getStringCellValue();
                break;
                 case BOOLEAN: //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;
   }
}

本文同步分享在 博客「cwl_java」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。java

相關文章
相關標籤/搜索