Java使用Apache POI進行Excel導入和導出


Manve依賴
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.5-FINAL</version>
        </dependency>

 

1. Apache POI 中常用的類
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
HWPF - 提供讀寫Microsoft Word DOC97格式檔案的功能。
XWPF - 提供讀寫Microsoft Word DOC2003格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀Microsoft Visio格式檔案的功能。
HPBF - 提供讀Microsoft Publisher格式檔案的功能。
HSMF - 提供讀Microsoft Outlook格式檔案的功能。

 

2.Excel中的工作簿、工作表、行、單元格中的關系:
一個Excel文件對應於一個workbook(HSSFWorkbook),
一個workbook可以有多個sheet(HSSFSheet)組成,
一個sheet是由多個row(HSSFRow)組成,
一個row是由多個cell(HSSFCell)組成

 

3.演示2003和2007版Excel解析(導出)
//獲取文件流
        InputStream inputStream = new FileInputStream("C:\\Users\\50360\\Desktop\\hahahhahahh.xlsx");

        //創建07版的Workbook  文件格式是xls是03版的 應該使用new HSSFWorkbook
        Workbook workbook = new XSSFWorkbook(inputStream);

        //獲取第一個Sheet1
        Sheet sheet = workbook.getSheetAt(0);

        //獲取一個POI的時間日期格式化器
        DataFormatter formatter = new DataFormatter();

        //循環遍歷Sheet1的每一行
        for (Row row : sheet) {

            //遍歷Sheet1每一行的每個單元格
            for (Cell cell : row) {

                CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());

                //獲取這個單元格的坐名稱  $A$1
                System.out.print(cellRef.formatAsString());
                System.out.print(" - ");

                //通過獲取單元格值並應用任何數據格式(Date,0.00,1.23e9,$ 1.23等),獲取單元格中顯示的文本
                String text = formatter.formatCellValue(cell);
                System.out.println(text);

                //獲取值並自己格式化
                switch (cell.getCellType()) {
                    // 字符串型
                    case Cell.CELL_TYPE_STRING:
                        System.out.println(cell.getRichStringCellValue().getString());
                        break;
                    // 數值型
                    case Cell.CELL_TYPE_NUMERIC:
                        // 如果是date類型則 ,獲取該cell的date值
                        if (DateUtil.isCellDateFormatted(cell)) {
                            System.out.println(cell.getDateCellValue());
                        } else {// 純數字
                            System.out.println(cell.getNumericCellValue());
                        }
                        break;
                    // 布爾
                    case Cell.CELL_TYPE_BOOLEAN:
                        System.out.println(cell.getBooleanCellValue());
                        break;
                    // 公式型
                    case Cell.CELL_TYPE_FORMULA:
                        System.out.println(cell.getCellFormula());
                        break;
                    // 空值
                    case Cell.CELL_TYPE_BLANK:
                        System.out.println();
                        break;
                    // 故障
                    case Cell.CELL_TYPE_ERROR:
                        System.out.println();
                        break;
                    default:
                        System.out.println();
                }
            }
        }

    }
4.Excel2003和2007的新建(導入)
//新建(導入)Excel方法,isXlsx標記為07版
    public Workbook export(boolean isXlsx) {
        
        //創建一個Excel
        Workbook workbook;
        
        //根據要求創建03或者07版本
        if(isXlsx) {
            workbook = new XSSFWorkbook();
        } else {
            workbook = new HSSFWorkbook();
        }
        
        //創建一個Sheet
        Sheet sheet = workbook.createSheet("My Sheet");
        
        //獲取模擬數據
        List<List<String>> content = this.getContent();
        
        //循環遍歷將數據填充到Excel中
        for(int i = 0; i < content.size(); i++) {
            Row row = sheet.createRow(i);
            List<String> rowData = content.get(i);
            for(int j  = 0; j < rowData.size(); j++) {
                row.createCell(j).setCellValue(rowData.get(j));
            }
        }
        return workbook;
    }
    
    //模擬導入的Excel中的數據
    private List<List<String>> getContent() {
        List<List<String>> result = new ArrayList<>();
        List<String> row = new ArrayList<>();
        result.add(row);
        row.add("序號");
        row.add("姓名");
        row.add("年齡");
        row.add("時間");

        row = new ArrayList<>();
        result.add(row);
        row.add("1");
        row.add("路人甲");
        row.add("18");
        row.add("2010-01-01");

        row = new ArrayList<>();
        result.add(row);
        row.add("2");
        row.add("路人乙");
        row.add("19");
        row.add("2010-01-02");

        row = new ArrayList<>();
        result.add(row);
        row.add("3");
        row.add("路人丙");
        row.add("20");
        row.add("2010-01-03");
        return result;
    }

 

最后:Apache POI可以操作很多文檔,比如word等,當然這里僅僅介紹了Excel常用的導入和導出功能,步驟已經寫上備注了。

 


免責聲明!

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



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