Excel到dataTable

问题描述:

我需要从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

这是我使用和它的工作对我来说:

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