2012-03-17 34 views
0

我有一個奇怪的問題,
當我嘗試打開並加載Excel數據到DataTable,
在Excel工作表中加載一些數據,但有些數據不加載,
是什麼問題,
你能幫助我嗎?
我加了GetExcelData函數,
請看這段代碼,
請告訴我是什麼問題。的Excel在C#中的DataTable錯誤

GROUP  CLASS  TYPE  C1  C2  C3  C4  C4  C5 
M1   10   A   D  B  D  A  A  D 
M1   10   B   C  D  E  E  D  D 
M2   11   A   D  D  D  D  D  E 
M2   11   B   C  D  E  D  E  A 

上面我放置了樣本表。
它只複製GROUP,CLASS和TYPE列中的數據。
但奇怪的是,在一些Excel文件中,這個錯誤不會發生,
,我沒有找到答案,決定在這裏問它。

public DataTable GetExcelData(string fileName, string sheetName) 
    { 
     string sql = ""; 
     OleDbConnection conn = new OleDbConnection(); 
     OleDbCommand command; 
     OleDbDataAdapter adapter = new OleDbDataAdapter(); 
     DataTable dt = new DataTable(); 
     command = conn.CreateCommand(); 
     string excel_file = fileName; 
     string excel_type = System.IO.Path.GetExtension(excel_file); 
     string connstr = ""; 

     if(excel_type=="XLSX") 
      connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0"; 
     else 
      connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +fileName + ";Extended Properties='Excel 12.0;IMEX=1; HDR=YES'"; 

     conn.ConnectionString = connstr; 
     sql = "SELECT * FROM [" + sheetName + "$]"; 

     command.CommandText = sql; 
     adapter.SelectCommand = command; 
     adapter.Fill(dt); 

     return dt; 
    } 
+2

請添加更多的信息在什麼數據加載,什麼沒有,我們還需要知道的Excel工作表中的內容,至少在數據類型 – ntziolis 2012-03-17 13:08:48

+3

不會吧需要交換兩個連接字符串?你正在使用Excel 8.0的.xlsx文件,我相信這應該是其他方法。 – xxbbcc 2012-03-17 13:10:36

+0

@xxbbcc:起初我以爲同樣的事情,但代碼將工作,因爲對'GetExtension()'的調用將返回「.xlsx」而不是「XLSX」,這意味着將無意中選擇正確的連接字符串。所以它的工作原理是錯誤的。 – 2012-05-08 00:10:05

回答

0

,因爲你的第一個連接字符串

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0"; 

是不是有IMEX = 1將不能夠導入混合類型的列,有時只發生,因爲如果clause.Same與HDR您的在1例HDR缺失的情況下。在if條件應該是你的連接字符串,

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";