2017-03-13 27 views
1

我使用下面的代碼的Linq在我行返回的最後填充的單元。然而,我不知道是什麼原因(也許某些格式化或類的東西)與空值返回單元格。例如與價值不使用LINQ返回null細胞 - Epplus

我行開始在B16和去AG16,本文中的代碼應該返回AG16,但這回AI16,而這種細胞是空白的,沒有價值,公式,什麼都沒有。

我想忽略細胞與空白值,所以返回AG16。

我按下面的代碼,它返回AI16即使它沒有價值

  • 16做的是單線行,他將檢查

我已經試圖使用下面的代碼,但它返回NULL而不是AG16,這是我的最後一個值單元格

var lastRowCellValue = worksheet.Cells.Last(c => c.End.Row == 16).Where(c => c.Value != null); 

我在做什麼錯?

+1

代替'.. c.Value!= NULL)''試試.. c.Value!= DBNull.Value)' – Pikoh

+0

@Pikoh回報率爲AI16。我真的不知道會發生什麼,因爲這個細胞完全是空的,我不知道爲什麼,它會返回。 –

+0

那麼也許你有'c.Value兩個空lines..check!= DBNull.Value || c.Value!= String.Empty)' – Pikoh

回答

2

假設問題類似於this,空細胞或格式化造成的問題,你可以使用從this answer導出的函數:

int LastColumnByRow(ExcelWorksheet sheet, int rownum) { 
    var col = sheet.Dimension.End.Column; 

    while (col >= 1) { 
     if (!string.IsNullOrEmpty(sheet.Cells[rownum, col].Text)) { 
      break; 
     } 
     col--; 
    } 
    return col; 
} 

調用,像這樣:

var lastRowCellValue = worksheet.Cells[16, LastColumnByRow(ws, 16)]; 
+0

這真的好像是一條路,但我在這裏測試過,發生異常。 「列超出範圍」。函數返回是0 我試圖改變一些東西,但沒有成功 –

+0

@ G.Sena道歉,我離開行設置爲2從我的測試,嘗試使用它的參數爲16. – Chawin

+0

是的,我做了測試使用第16行,但返回是一樣的。 0 豈不是由於雖然這樣做,直到它達到0? 這將變量減少到0? –