Java讀取excel表格


Java讀取excel表格

一般都是用poi技術去讀取excel表格的,但是這個技術又是什么呢

什么是Apache POI?

Apache POI是一種流行的API,它允許程序員使用Java程序創建,修改和顯示MS Office文件。這由Apache軟件基金會開發使用Java分布式設計或修改Microsoft Office文件的開源庫。它包含類和方法對用戶輸入數據或文件到MS Office文檔進行解碼。

Apache POI

Apache POI是Apache軟件基金會提供的100%開源庫。大多數中小規模的應用程序開發主要依賴於Apache POI(HSSF+ XSSF)。它支持Excel 庫的所有基本功能; 然而,呈現和文本提取是它的主要特點。

 Circle

 

工作簿

這是創建或維護Excel工作簿的所有類的超接口。它屬於org.apache.poi.ss.usermodel包。是實現此接口的兩個類,如下所示:

  • HSSFWorkbook : 這個類有讀取和.xls 格式和寫入Microsoft Excel文件的方法。它與微軟Office97-2003版本兼容。

  • XSSFWorkbook : 這個類有讀寫Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它與MS-Office版本2007或更高版本兼容。

HSSFWorkbook

它是在org.apache.poi.hssf.usermodel包的高層次的類。它實現了Workbook 接口,用於Excel文件中的.xls格式。下面列出的是一些本類下的方法和構造函數。

類的構造函數

S.No. 構造函數和說明
1

HSSFWorkbook()

從頭開始創建一個新的HSSFWorkbook對象時。

2

HSSFWorkbook(DirectoryNode directory, boolean preserveNodes)

創建一個特定的目錄中一個新的HSSFWworkbook對象。

3

HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)

給定一個POIFSFileSystem對象和特定的目錄中,它創建了一個SSFWorkbook對象讀取指定的工作簿。

4

HSSFWorkbook(java.io.InputStream s)

創建使用輸入流中的新HSSFWorkbook對象時。

5

HSSFWorkbook(java.io.InputStream s, boolean preserveNodes)

構建在輸入流的POI文件系統。

6

HSSFWorkbook(POIFSFileSystem fs)

使用POIFSFileSystem對象構造的新HSSFWorkbook對象時。

7

HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)

給定一個POIFSFileSystem對象時,它會創建一個新的HSSFWorkbook對象時讀取指定的工作簿。

這些構造內的常用參數:

  • directory : 這是從POI文件系統處理的目錄。

  • fs :它是包含簿流該POI的文件系統。

  • preservenodes : 這是決定是否保留其他節點像宏的可選參數。它消耗大量的內存,因為它存儲在內存中的所有POIFileSystem(如果設置)。

注意:HSSFWorkbook類包含了許多方法;然而,它們僅與XLS格式兼容。在本教程中,重點是在Excel文件格式的最新版本。因此,HSSFWorkbook類的方法,這里沒有列出。如果需要這些類的方法,那么請參照POI-HSSFWorkbook類API在 https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html.

XSSFWorkbook

它是用於表示高和低層次Excel文件格式的類。它屬於org.apache.xssf.usemodel包,並實現Workbook接口。下面列出的是這個類的方法和構造函數。

類的構造函數

S.No. 構造函數和說明
1

XSSFWorkbook()

從頭開始創建一個新的XSSFworkbook對象。

2

XSSFWorkbook(java.io.File file)

構造從給定文件中的XSSFWorkbook對象。

3

XSSFWorkbook(java.io.InputStream is)

構造一個XSSFWorkbook對象,通過緩沖整個輸入流到內存中,然后為它打開一個OPCPackage對象。

4

XSSFWorkbook(java.lang.String path)

構建一個給定文件的完整路徑的XSSFWorkbook對象。

 

 

Sheet

Sheet是在org.apache.poi.ss.usermodel包的接口,它是創建具有特定名稱的高或低級別的電子表格的所有類的超接口。電子表格的最常見的類型是工作表,它被表示為單元的網格。

HSSFSheet

這是在org.apache.poi.hssf.usermodel包的類。它可以創建Excel電子表格,它允許在sheet 方式和表數據格式。

類的構造函數

S.No. 構造函數及描述
1

HSSFSheet(HSSFWorkbook workbook)

創建新HSSFSheet通過調用HSSFWorkbook從頭開始創建一個表。

2

HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)

創建HSSFSheet表示給定表對象。

XSSFSheet

這是代表了Excel電子表格的高級別代表的一類。這在org.apache.poi.hssf.usermodel包下。

類的構造函數

S.No. 構造函數及描述
1

XSSFSheet()

創造了新的XSSFSheet- 調用XSSFWorkbook從頭開始創建一個表。

2

XSSFSheet(PackagePart part, PackageRelationship rel)

創建XSSFSheet表示給定包的一部分和關系。

類方法

S.No. 方法和描述
1

addMergedRegion(CellRangeAddress region)

添加單元的合並區域(因此這些單元格合並形成一個)。

2

autoSizeColumn(int column)

調整列寬,以適應的內容。

3

iterator()

此方法是用於rowIterator()的別名,以允許foreach循環

4

addHyperlink(XSSFHyperlink hyperlink)

注冊超鏈接的集合中的超鏈接此工作表格上

對於此類的其余的方法,請參閱完整的API在:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html.

這是在org.apache.poi.ss.usermodel包的接口。它是用於一排的電子表格的高層表示。它是代表了POI庫的行所有類的超接口。

XSSFRow

這是在org.apache.poi.xssf.usermodel包的類。它實現了Row接口,因此它可以在電子表格中創建行。下面列出的是這個類在方法和構造函數。

類方法

S.No. 描述
1

createCell(int columnIndex)

創建新單元行並返回。

2

setHeight(short height)

設置短單位的高度。

對於此類的其余的方法,參考如下鏈接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

單元格

這是在org.apache.poi.ss.usermodel包的接口。它是代表了單元在電子表格中的行中的所有類的超接口。

單元格可以使用各種屬性,例如空白,數字,日期,錯誤等單元格被添加到一個行之前應具有(基於0)自己的編號。

XSSFCell

這是在 org.apache.poi.xssf.usermodel 包的類。它實現了單元格界面。它是單元在電子表格中的行的一個高層次的表示。

 

現在我用Java實現讀取excel表格

代碼實現

public static void excel() throws Exception {
        //用流的方式先讀取到你想要的excel的文件
        FileInputStream fis=new FileInputStream(new File(System.getProperty("user.dir")+"/src/excel.xls"));
        //解析excel
        POIFSFileSystem pSystem=new POIFSFileSystem(fis);
        //獲取整個excel
        HSSFWorkbook hb=new HSSFWorkbook(pSystem);
        System.out.println(hb.getNumCellStyles());
        //獲取第一個表單sheet
        HSSFSheet sheet=hb.getSheetAt(0);
        //獲取第一行
    int firstrow=    sheet.getFirstRowNum();
    //獲取最后一行
    int lastrow=    sheet.getLastRowNum();
    //循環行數依次獲取列數
        for (int i = firstrow; i < lastrow+1; i++) {
            //獲取哪一行i
            Row row=sheet.getRow(i);
            if (row!=null) {
                //獲取這一行的第一列
            int firstcell=    row.getFirstCellNum();
            //獲取這一行的最后一列
            int lastcell=    row.getLastCellNum();
            //創建一個集合,用處將每一行的每一列數據都存入集合中
            List<String> list=new ArrayList<>();
            for (int j = firstcell; j <lastcell; j++) {
                //獲取第j列
                Cell cell=row.getCell(j);
                
                if (cell!=null) {
                    System.out.print(cell+"\t");
                    list.add(cell.toString());
                }
            }
            
            User user=new User();
            if (list.size()>0) {
                user.setUsername(list.get(1));
                user.setPassword(list.get(2));
            }
            BaseDAO dao=new BaseDAO();
            dao.save(user);
            System.out.println();
            }
        }
        fis.close();
    }

 


免責聲明!

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



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