簡體   English   中英

如何比較Excel文件? OleDbDataAdapter無法讀取Excel選項卡中的字符串列嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM