下文介紹java解析Excel文件的方案
前置準(zhǔn)備
1.第三方j(luò)ar包或者M(jìn)aven配置
org.apache.poi的jar包
Maven配置如下
? ? <groupId>org.apache.poi
? ? <artifactId>poi
? ? <version>3.15
</dependency>
分析
首先我們大概分析下,實(shí)現(xiàn)解析大概需要那幾步:
第一步、加載數(shù)據(jù)源文件
說明:把源文件以數(shù)據(jù)流的形式寫入可以操作解析Excel文件的對象中
第二步、獲取工作表頁數(shù)據(jù)
說明:利用可以操作解析Excel文件的對象,獲取工作表頁數(shù)據(jù)
第三步、獲取工作表頁中行數(shù)據(jù)
說明:工具類自帶方法獲取行數(shù)據(jù)
第四步、獲取工作表頁中指定行的指定列數(shù)據(jù)
說明:工具類自帶方法獲取列數(shù)據(jù)
實(shí)際說明
下面我們實(shí)際說明每一步所涉及到的代碼內(nèi)容,有些判斷細(xì)節(jié)就不一一列舉,請看后面的整體截圖。
第一步、加載數(shù)據(jù)源文件
//先把目標(biāo)文件轉(zhuǎn)為文件流
File excel =new File("目標(biāo)文件所處地址");
//創(chuàng)建輸出流對象
FileInputStream fis =new FileInputStream(excel);
//將輸出的流對象引入到解析excel文件的對象中
Workbook wb =new HSSFWorkbook(fis);
第二步、獲取工作表頁數(shù)據(jù)
?//讀取第三個工作表頁的數(shù)據(jù)(第一個工作表是0)
Sheet sheet = wb.getSheetAt(2);
第三步、獲取工作表頁中行數(shù)據(jù)
//讀取的行.如果sheet中一行數(shù)據(jù)都沒有則返回-1,只有第一行有數(shù)據(jù)則返回0,最后有數(shù)據(jù)的行是第n行則返回n-1
int firstRowIndex = sheet.getFirstRowNum();
//讀取的總的行數(shù)
int lastRowIndex = sheet.getLastRowNum();
//獲取指定行的數(shù)據(jù)
Row row = sheet.getRow(1);
可以通過for循環(huán),遍歷每一行并獲取行數(shù)據(jù),再在循環(huán)內(nèi)對列數(shù)據(jù)進(jìn)行處理
第四步、獲取工作表頁中指定行的指定列數(shù)據(jù)
//當(dāng)前行的第一個列數(shù)據(jù)的下標(biāo)
int firstCellIndex = row.getFirstCellNum();
//row中一列數(shù)據(jù)都沒有則返回-1,只有第一列有數(shù)據(jù)則返回1,最后有數(shù)據(jù)的列是第n列則返回n
int lastCellIndex = row.getLastCellNum();
//獲取當(dāng)前下標(biāo)(列)的單元格數(shù)據(jù)
Cell cell = row.getCell(cIndex);
通過以上步驟就能解析到各行各列的數(shù)據(jù)值了,具體怎么存儲、使用就可以結(jié)合實(shí)際的業(yè)務(wù)場景搭配使用。
下面詳細(xì)說明下,解析過程中需要注意的一些細(xì)節(jié)點(diǎn)
源文件相關(guān)的一些判斷處理
//判斷是文件并且是存在的
if (excel.isFile() && excel.exists()) {
//拆分文件名和后綴
? ? String[] split = excel.getName().split("\\.");? //.是特殊字符,需要轉(zhuǎn)義
? ? //創(chuàng)建解析excel文件的對象類
? ? Workbook wb;
? ? //根據(jù)文件后綴(xls/xlsx)進(jìn)行判斷
? ? if ("xls".equals(split[1])){
//創(chuàng)建輸出流對象
? ? ? ? FileInputStream fis =new FileInputStream(excel);? //文件流對象
? ? ? ? //將輸出的流對象引入到解析excel文件的對象中
? ? ? ? wb =new HSSFWorkbook(fis);
? ? }else if ("xlsx".equals(split[1])){
//將文件對象引入到解析excel文件的對象中
? ? ? ? wb =new XSSFWorkbook(excel);
? ? }else {
System.out.println("文件類型錯誤!");
return null;
? ? }