場景:
最近在做專案時,需要使用解析excel資料,我使用的是poi,這個時候遇到 poi 的大坑,讀取資料時,不會過濾空行!是的,不會過濾空行,比如乙份excel,原來有30條資料,從底下往上刪除了20條,但當使用poi 解析的時候,還是讀取到30行,阿西吧類,導致我後面的業務**報錯,網上的多個方法試了都無效,最終使用最土的方法暫時性的解決了這個問題。
解決思路:
解析excel時,因為我們是有模板的,只要解析前面的幾列,所以,我就想,既然我不能識別你空行,那我總能識別你一行裡有幾個空的單元格吧?如果這行的空單元格數量等於我需要判斷的列數,那我就判定你這行是空的,說幹就幹,下面就是我的解決**:
/**
* 判斷是否是空行
* @param row 行物件
* @param rownum 需要判斷的列數
* @return
*/private static int getrowisnull(row row,int rownum) else if (cell.getcelltype() == hssfcell.cell_type_blank)
}return num;
}
如上面那樣判斷,如果還有「漏網之魚」,還可以繼續新增條件進行判斷,這種方法雖然土,但是暫時可以解決我的問題 啊哈哈哈
的row 是org.apache.poi.ss.usermodel.row 物件,獲取方式
workbook wb0 = null;
//判斷當前excel是什麼版本的檔案
if (url.substring(url.length() - 4, url.length()).equals(".xls")) else if (url.substring(url.length() - 5, url.length()).equals(".xlsx")) else
//獲取第乙個表單資料
sheet sht0 = wb0.getsheetat(0);
for (row r : sht0)
2020-12-16 後續更新:
execl空行校驗方法:
//判斷row是否為空
public static boolean isrowempty(row row)
int firstcellnum = row.getfirstcellnum(); //第乙個列位置
int lastcellnum = row.getlastcellnum(); //最後一列位置
int nullcellnum = 0; //空列數量
for (int c = firstcellnum; c < lastcellnum; c++)
cell.setcelltype(cell.cell_type_string);
string cellvalue = cell.getstringcellvalue().trim();
if (stringutils.isempty(cellvalue))
}//所有列都為空
if (nullcellnum == (lastcellnum - firstcellnum))
return false;
}
迴圈判斷當前行的每乙個列是否為空,如果均為空,則為空行,否則為非空行。
tips:
for迴圈中的row獲取它在excel 中的真實行數 : r.getrownum() + 1
利用POI讀取Excel檔案
前幾天實現了利用poi建立excel檔案,今天分享一下如何利用poi讀取excel檔案。要讀取的檔案內容,以下截圖已給出 下面講讀取檔案內容的方法。先建立乙個讀取excel的工具類。操作excel 的功能類 public class excelreader catch ioexception e 獲...
java 使用poi 讀取Excel
org.apache.poi poi3.10 final org.apache.poi poi ooxml 3.10 final 讀入excel檔案,解析後返回 param file throws ioexception public static listreadexcel multipartfi...
poi讀取excel元素
忽略元資料末尾 回到原資料開始處 org.apache.poi poi3.11 beta2 org.apache.poi poi ooxml 3.11 其中poi ooxml是為讀取xlsx特意引入,切要和poi版本一致 inputstream is new fileinputstream e xs...