讀寫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; } }