2013-05-12 252 views
0

我嘗試使用c#讀取.xls文件。在C中讀取excel表單元格#

這是我的代碼

OleDbCommand command = new OleDbCommand("Select [Id], [Name], [Email] from [sheet$]", connection); 

OleDbDataAdapter objAdapter = new OleDbDataAdapter(); 
objAdapter .SelectCommand = command; 

DataSet objDataset = new DataSet(); 

objAdapter .Fill(objDataset1); 
DataView dv = objDataset .Tables[0].DefaultView; 

for (int i = 0; i < dv.Count; i++) 
{ 
    if (dv[i][0] != DBNull.Value) 
    { 
    } 
} 

但在Excel工作表單元具有綠色標誌不讀。

enter image description here

它說它是空。 那麼我怎麼讀這樣的細胞?

謝謝。

回答

0

當從OleDbCommand工作表中讀取Excel表格必須格式化爲一個表,與行1列標題和數據下(你的小屏幕截圖似乎並沒有遵循這一點)。我不知道在沒有像這樣設置工作表時你會得到什麼樣的閱讀,但DBNull.Value聽起來像是一個合理的可能性。

至於綠色標記,單元格可能是格式化爲文本 - 從內存我會說如果你鼠標懸停在該綠色標記Excel說「數值被格式化爲文本」;如果你只有幾個你可以嘗試Ctrl + F1來修復格式(使其通用)和F2 + Enter(輸入單元格/確認條目)來修復值。當然,如果有5000行數據,這不是你想要做的事情 - 你可以將(即不是格式)複製並粘貼到新的工作表中。

如果你的數據在$A$1開始,還是你得到的是DBNull.Value,那麼我會嘗試這樣的事情,假設所有你從OLE駕駛員得到的是object

for (int i = 0; i < dv.Count; i++) 
{ 
    var value = dv[i][0].ToString(); 
    if (!string.IsNullOrEmpty(value)) 
    { 
     var intValue = Convert.ToInt32(value); 
     ... 
    } 
} 

還要確保您想要讀取的工作表在工作簿被保存&關閉時處於活動狀態。或者使其成爲工作簿中唯一的工作表,如果可能的話。

相關問題