NPOI是POI的.NET版本。POI是用Java寫成的庫,能幫助用戶在沒有安裝Office環境下讀取Office2003-2007文件。NPOI在.NET環境下使用,能讀寫Excel/Word文件。在實際項目中,一般是對Excel表格的處理,這方面的教程網上已經不少了,稍微搜索一下就能上手使用。這裏記錄一下我使用NPOI讀取Excel數據遇到的一個坑。測試
當我把本地調試正常的程序發給用戶測試時,讀取某一個Excel表格時出現了「未將對象引用設置到對象的實例」這個錯誤。爲了找出bug我用用戶測試的Excel進行調試,發如今讀取Excel行數時,實際有數據的行數爲2,但程序讀取爲3行。也就是說有一行是空行,可是程序仍認爲其有數據,而且row!=null也沒法判斷。代碼以下:調試
int rowCount = sheet.LastRowNum; for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) //從第二行開始讀數據 { IRow row = sheet.GetRow(i); if(row != null) { //讀取數據 } }
後面我測試了一下,在Excel中對整行執行「清空數據」的操做時就會形成這個現象,「刪除」整行則不會。而在Excel生產過程當中,沒法保證用戶不使用「清空數據」這個操做。那麼只能在程序中進行空行的判斷。然而百度、Google了一圈,也沒發現有什麼能夠直接判斷出爲空行的方法。彷佛只有使用最原始的循環一行的每個cell,判斷是否都爲空來斷定是否爲空行。若是cell知足一下條件,即表示有數據。code
if(cell !=null && cell.CellType != CellType.Blank && string.IsNullOrEmpyt(cell.ToString().Trim()))
不知道還有沒有更好的方法解決這個問題,若是有哪位大神知道的話還請留言。對象