2011-02-09 8 views
0

excelからdatatableにシートを取得する必要があります。私はまずLinqToExcelライブラリで試しましたが、これはエクセルシートから大きな数字を指数関数的な数値として取り出しました。私は "2352143523453452334544"のような大きな数字について話しています。テキストとして整形されている場合にのみ、正常に動作します。 その後、私はこれを試してみた:Excel to 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"]; 

この1つはヌルと同じ条件で同じ値を返しました。 Excelファイルからデータを取り出す簡単な方法はありませんか?コンバージョンも何もないそれを文字列としてすべて取り、それをデータテーブルに入れますか?

+0

は、CSV形式にエクスポートするようにしてください。 – jcubic

答えて

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