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滿足一下條件,即表示有數據。
if(cell !=null && cell.CellType != CellType.Blank && string.IsNullOrEmpyt(cell.ToString().Trim()))
不知道還有沒有更好的方法解決這個問題,如果有哪位大神知道的話還請留言。