![](/img/trans.png)
[英]How can I read only first row from an Excel file with OleDbDataAdapter?
[英]How can I compare Excel files? OleDbDataAdapter doesn't read string column in Excel tab?
我們的Excel 2013 xlsx文件具有選項卡“ DEPTS”,此選項卡具有名為“ 1F / 3F”的列。 此列中的每個單元格可以具有以下值之一:“ 5”,“ Ati_3”,“ 4”,“ Btu_4”等。
在今天之前,我將使用此簡單代碼段將此選項卡的內容移至數據集。 數據集查看器將顯示所有行和所有列:
string connectionString = string.Format(ExcelConnstring, FileName);
string deptsSql = string.Format("SELECT * FROM [{0}$]", "DEPTS");
DataSet deptsDataset = new DataSet();
using (OleDbConnection con = new OleDbConnection(connectionString))
{
con.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(deptsSql, con);
adapter.Fill(deptsDataset);
con.Close();
}
return deptsDataset;
今天,我嘗試上傳今天的文件,該文件的格式完全相同。 查看數據集的內容時,我注意到“ 1F / 3F”列中非數字的單元為空。 它正在讀取所有40行,但是那些值可能為“ Ati_3”,“ Btu_4”(即非數字)的特定單元格將被讀取為空。 數值正在正確讀取。
如何將較舊的文件與此文件進行比較? 該文件似乎是正確的,我不知道如何檢查是否在該特定列中添加了會導致錯誤的內容。
謝謝。
ADO.NET驅動程序使用每一列(大約前10行)中的數據來確定其數據類型,這很糟糕,但實際上是它。 如果您的列的前10個左右行中都有數字值,則驅動程序會將其視為數字列,並將所有非數字值讀取為null。
驅動程序不支持excel文檔中的單元格格式。 如果要確保將數據讀取為文本,並且可以控制生成excel文檔的過程,則可以通過插入10個左右的虛擬值(例如'Ignore')來強制將列視為文本。閱讀內容后,丟棄這些行。
通過確保一列的前10行包含文本,驅動程序將正確讀取該列的數字和非數字值(它們都將被視為文本)。
如果無法控制要讀取的文件的創建,則可以切換到另一種技術來讀取Excel文檔。 一些替代方案包括:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.