使用POI進行Excel操作的總結一——創建Workbook,Sheet,Row以及Cell


前段時間,看在其他的網站上給出Excel文檔的導入與導出操作,感覺很酷的樣子,所以就學習了一下如何使用POI進行Excel的操作,現在對之前的學習過程進行一個總結。

一、現在普遍使用的Excel文檔有xls以及xlsx這兩種Excel文檔,其中xls格式的Excel文檔又分為5.0/95工作簿以及97-2003工作簿這兩種。需要注意的是,由於5.0/95工作簿的版本太低,現在的POI文檔不再支持這種類型的Excel文檔的讀取工作,當試圖讀取這種類型的Excel文檔的時候,POI會拋出一個異常(OldExcelFormatException)。我現在使用的POI是3.14版本。

二、Workbook的創建

1、由於Excel中存在xls以及xlsx這兩種格式,所以創建方式也有所不同。其中對於xls格式的文檔,需要使用HSSFWorkbook來創建工作簿對象,而對於xlsx格式的Excel文檔,則需要使用XSSFWrokbook來創建工作簿。有一點需要注意的是,HSSFWorkbook與XSSFWorkbook這兩個類其實都是Workbook接口的一個實現類。好了,下面就是創建工作簿對象的代碼:

    //創建一個不存在的excel文件
    private static Workbook createWorkbookIfNotExist(String fileName) throws Exception {
        Workbook wb = null;
        
        if(fileName.endsWith(".xls")) {
            wb = new HSSFWorkbook();
        } else if(fileName.endsWith(".xlsx")) {
            wb = new XSSFWorkbook();
        } else {
            throw new Exception("文件類型錯誤!");
        }
        
        try{
            OutputStream output = new FileOutputStream(fileName);
            wb.write(output);
        }catch(FileNotFoundException e) {
            System.out.println("文件創建失敗,失敗原因為:" + e.getMessage());
            throw new FileNotFoundException();
        }
        System.out.println(fileName + "文件創建成功!");
        
        return wb;
    }
    
    //創建一個新的或者已存在的Excel文檔的Workbook
    public static Workbook createWorkbook(String fileName) throws Exception {
        InputStream input = null;
        Workbook wb = null;
        
        try{
            input = new FileInputStream(fileName);
            wb = WorkbookFactory.create(input);
        } catch(FileNotFoundException e) {
            System.out.println("要打開的文件不存在,正試圖創建該文件,請稍后……!");
            wb = createWorkbookIfNotExist(fileName);
        } catch(OldExcelFormatException e) {
            System.out.println("文件打開失敗,原因:要打開的Excel文件版本過低!");
            throw new OldExcelFormatException("文件版本過低");
        } finally {
            if(input != null) {
                input.close();
            }
        }
        
        return wb;
    }

2、創建Sheet的時候,同樣的也存在HSSFSheet以及XSSHSheet這兩種類型。同樣的HSSFSheet以及XSSFSheet這兩個類也是Sheet接口的實現類。如果直接使用實現類進行創建Sheet的話,那么,對於不同的格式,需要使用不同的實現方式,盡管實現的方式都一致。由於Java的多態關系,在這里,我使用Sheet接口進行處理。代碼:

    //創建sheet
    public static Sheet createSheet(Workbook wb , String sheetName) {
        Sheet sheet = wb.getSheet(sheetName);
        
        if(sheet == null) {
            System.out.println("表單" + sheetName + "不存在,試圖創建該sheet,請稍后……");
            sheet = wb.createSheet(sheetName);
            System.out.println("名為" + sheetName +"的sheet創建成功!");
        }
        
        return sheet;
    }

3、對於Row的創建,也是一樣,也是使用Row這個接口進行實現。代碼:

    //創建行row
    public static Row createRow(Sheet sheet , int rowNum) {
        Row row = sheet.getRow(rowNum);
        
        if(row == null) {
            System.out.println("行號為:" + rowNum + "的行不存在,正試圖創建該行,請稍后……");
            row = sheet.createRow(rowNum);
            System.out.println("行號為:" + rowNum + "的行創建成功!");
        }
        
        return row;
    }

4、對於Cell也是一樣,同樣使用Cell接口進行編程。代碼:

   //創建單元格cell
    public static Cell createCell(Row row , int cellNum) {
        Cell cell = row.getCell(cellNum);
        
        if(cell == null) {
            System.out.println("該單元格不存在,正在試圖創建該單元格,請稍后……");
            cell = row.createCell(cellNum);
            System.out.println("該單元格創建成功!");
        }
        
        return cell;
    }

以上幾個操作就是Workbook、Sheet、Row以及Cell的創建工作。另外,當對Excel文檔操作完成之后,需要使用Workbook的write方法保存一下,然后上述的改動才會保存在你創建的Excel文檔中。代碼:

wb03.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\03styleExcel.xls"));
wb07.write(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\07styleExcel.xlsx"));

其中wb03就是使用上述方法創建的xls格式的Excel文檔,wb07則是xlsx格式的文檔。

好了,這篇博文到這里就結束了。如果文章中有什么錯誤或不足的地方,希望各位大俠多多指點。后面的博文,會陸續介紹如何往Excel文檔中寫入不同格式的數據,以及邊框、圖片、合並單元格、隱藏與顯示行等操作。


免責聲明!

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



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