java 讀取 Excel表格內容

讀寫Excel,這麼重要且普遍的問題,偉大的apache,早就爲我們封裝好了jar包,供我們使用了。無需我們再造輪子。

第一步:添加jar包依賴

<!--讀取 excel 的所需jar包-->
<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>

第二步:定義文件流 用來讀取文件

InputStream is = new FileInputStream(path);//path爲需要讀取的文件路徑
//XSSFWorkbook 是讀取2007以上版本的表格,及.xlsx結尾
//HSSFWorkbook 是讀取2003版本的表格,及.xls結尾
//現在應該一般都是2007以上的版本了吧
XSSFWorkbook excel = (XSSFWorkbook) XSSFWorkbookFactory.create(is);
is.close();
//當且僅當我們只用第一個表,即sheet;也可以循環遍歷,這裏簡單認爲只有一個sheet;
//excel.getNumberOfSheets() 可以獲取到sheet的數量Sheet sheet = excel.getSheetAt(0);
sheet就是我們獲取的需要操作的表格對象了。

第三步:需要操作的表對象拿到了,開始對具體的數據進行剖析,拆解成我們可以處理的數據類型,完成代碼如下:

package cn.comcpz;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 讀取表格Excel
 *
 */
public class App 
{
    public static void main( String[] args ) throws Exception {
//        System.out.println( "Hello World!" );
        String path = "C:\\Users\\Administrator\\Desktop\\test.xlsx";
        List<Map> dataList= getExcelData(path);
        System.out.println("list:"+dataList);
    }
    public static List<Map> getExcelData(String path) throws Exception{
        List<Map> dataList = new ArrayList<>();
        InputStream is = new FileInputStream(path);
       
        XSSFWorkbook excel = (XSSFWorkbook) XSSFWorkbookFactory.create(is);
        is.close();
        //當且僅當我們只用第一個表,即sheet
        Sheet sheet = excel.getSheetAt(0);
        //獲取最後一行的行數
        int rows = sheet.getLastRowNum();
        for(int rowNo=1;rowNo<=rows;rowNo++){//因爲我這裏第一行是列名,所以我從第二行開始取數據,0是第一行,1是第二行
            //定義一個map 用於接收每一行的數據,當然也可以定義對象接收
            Map<String,String> map = new HashMap<>();
            Row row = sheet.getRow(rowNo);
            //一行有多個列,取最後一個列數,當做一共有多少列
            int cells = row.getLastCellNum();
            //遍歷列的數據
            for(int cellNo = 0;cellNo<cells;cellNo++){
                Cell cell = row.getCell(cellNo);
                String cellContent = cell.getStringCellValue();
                map.put("key"+cellNo,cellContent);
            }
            dataList.add(map);
        }
        return dataList;
    }
}

 

 

 

發佈了72 篇原創文章 · 獲贊 14 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章