2013-03-06 102 views
1

導入Excel到數據表中,我使用的是簡單的代碼:導入Excel到DataTable中的字符串的空

string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 12.0;", physicalFolder + FileUpload1.FileName); 
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
DataSet ds = new DataSet(); 

當在Excel中的行之一,如果我的行看起來像下面

enter image description here

字符串中省略,我的數據集看起來像這樣

enter image description here

但是如果我添加一些字符串,如果我上傳的是這樣的:

enter image description here

然後我的數據集看起來不省略字符串:

enter image description here

回答

1

這是因爲提供者決定列的第一行(標題行之後的行)的列的類型。當第一行包含一個數字時,列的類型爲double或另一個數字類型,因此它不能包含字符串值。

我嘗試了所有可能的方式(事先設置表格結構,使用DataReader,更改單元格的格式,...),但都失敗了。這似乎是Microsoft.Jet.OLEDB供應商的問題。我高度推薦您使用第三方excel閱讀庫。有很多開源庫可用。

如果您的文件是Excel 2007(.xlsx)文件,我強烈建議使用EPPluse。它也可以作爲NuGet package

否則,你可以看看this answer找到更多的庫。

+0

我不想處理更多問題並更改爲EPPlus。這樣可行。 – HOY 2013-03-14 09:48:04

2

MD.Unicorn的回答不是100%正確的。您的OLEDB提供程序使用名爲TypeGuessRows的設置來確定要讀取多少行來確定列的數據類型。不幸的是,這個設置不能在連接字符串中指定,並且必須在系統註冊表中進行更改。有關更多詳細信息,請參閱this問題。

0

在連接字符串中使用IMEX = 1。希望這將解決這個問題..

1

試圖改變自己的OleDbConnection字符串格式如下:

代碼段 OleDbConnection的CON =新的OleDbConnection( @「供應商= Microsoft.Jet.OLEDB.4.0;數據源= C:\ book1.xls;擴展屬性='Excel 8.0; HDR =是; IMEX = 1'「);

注意:「IMEX = 1;」告訴驅動程序總是將「混合」(數字,日期,字符串等)數據列作爲文本讀取。請注意,此選項可能會影響Excel表單寫入訪問權限。

+0

在我的情況下,它不工作。大小寫在列中,第一個單元格的值是date,其他的是字符串,而在另一個列中,第一個單元格的值是字符串,其餘是數字。剩下的值仍然是空白的。 – 2015-10-09 11:33:56