2011-02-09 34 views
0

我需要從excel中獲取工作表到數據表。我第一次嘗試使用LinqToExcel庫,但是這從Excel表中取得了大量的指數。我在談論像「2352143523453452334544」這樣的大數字。只有當它們被格式化爲文本時,它才能正常工作。 之後,我已經試過這樣:Excel到dataTable

OleDbConnection con = null; 
System.Data.DataTable dt = null; 
System.Data.DataTable dataTable1 = new System.Data.DataTable(); 
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + UploadFileName + ";Extended Properties=Excel 8.0;"; 
string sql_xls; 
con = new OleDbConnection(conStr); 
con.Open(); 

//OracleDataAdapter oda = new OracleDataAdapter(); 
//OracleCommand cmd = new OracleCommand("select * from [Sheet1$]", con); 

dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
string[] excelSheetNames = new string[dt.Rows.Count]; 
int i = 0; 
foreach (System.Data.DataRow row in dt.Rows) 
{ 
    excelSheetNames[i] = row["TABLE_NAME"].ToString(); i++; 

} 

sql_xls = "SELECT * FROM [" + excelSheetNames[0] + "]"; 
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql_xls, conStr); 
System.Data.DataSet myDataSet = new System.Data.DataSet(); 
dataAdapter.Fill(myDataSet, "ExcelInfo"); 
dataTable1 = myDataSet.Tables["ExcelInfo"]; 

這一個在相同的條件下爲空返回的值相同。 是不是有一個簡單的方法來從Excel文件中獲取數據,因爲它是?沒有轉換,沒有任何東西。把它全部作爲一個字符串,並把它放入一個數據表?

+0

嘗試導出爲CSV格式。 – jcubic 2011-02-09 07:57:12

回答

1

這是我使用和它的工作對我來說:

private DataTable LoadXLS(string strFile, String sheetName) 
    { 
     DataTable dtXLS = new DataTable(sheetName); 

     try 
     { 
      string strConnectionString = ""; 

      if(strFile.Trim().EndsWith(".xlsx")) 
      { 
       strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", strFile); 
      } 
      else if(strFile.Trim().EndsWith(".xls")) 
      { 
       strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", strFile); 
      } 

      OleDbConnection SQLConn = new OleDbConnection(strConnectionString); 
      SQLConn.Open(); 

      OleDbDataAdapter SQLAdapter = new OleDbDataAdapter(); 
      string sql = "SELECT * FROM [" + sheetName + "$]"; 

      OleDbCommand selectCMD = new OleDbCommand(sql, SQLConn); 
      SQLAdapter.SelectCommand = selectCMD; 

      SQLAdapter.Fill(dtXLS); 
      SQLConn.Close(); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

     return dtXLS; 
    } 

但是你可以嘗試導出爲CSV還有: LinqToCSV

+0

謝謝!這個解決方案比第一個更好(現在如果他們被格式化爲數字我不會再得到數字),但是如果這個數值既不是數字也不是格式,我仍然得到指數數字。 – maephisto 2011-02-10 12:57:32