NPOI讀取Excel遇到的坑


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()))

不知道還有沒有更好的方法解決這個問題,如果有哪位大神知道的話還請留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM