原文:http://www.sufeinet.com/thread-2029-1-1.html
1. StreamReader 方法
這種方法一般不用,因為他讀出來的是流,一般是轉成字符串
代碼如下:
StreamReader sr = new StreamReader("文件名以及完整路徑",System.Text.Encoding.Default); string data = sr.ReadToEnd(); sr.Close();
2.OleDbConnection讀取
最常 用的看下代碼吧
/**/ /// <summary> /// 返回Excel數據源 /// </summary> /// <param name="filename">文件路徑</param> /// <param name="TSql">TSql</param> /// <returns>DataSet</returns> public static DataSet ExcelToDataSet(string filename, string TSql) { DataSet ds; string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;data source=" + filename; OleDbConnection myConn = new OleDbConnection(strCon); string strCom = TSql; myConn.Open(); OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn); ds = new DataSet(); myCommand.Fill(ds); myConn.Close(); return ds; }
使用方法如下,只要寫Sql語句就行了
//設置T_Sql string TSql = "SELECT * FROM [sheel1$]"; //讀取數據 DataTable table = ExcelToDataSet(fullPath, TSql).Tables[0];
在這種情況下大家一般都會碰到這樣的問題
如果是動態導入很多Excel表格的時候,他們的表名可能不一樣,總不能每次都輸入一次表名吧,其它不需要的
只要用下面的方法就可以得到表名
請看代碼
/// <summary> /// 動態取Excel表名 /// </summary> /// <param name="fullPath">文件路徑</param> /// <returns></returns> public static string GetExcelFirstTableName(string fullPath) { string tableName = null; if (File.Exists(fullPath)) { using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." + "OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + fullPath)) { conn.Open(); tableName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim(); } } return tableName; }
修改上面的代碼如下所示
string tableName = GetExcelFirstTableName("文件 路徑"); //設置T_Sql string TSql = "SELECT * FROM [" + tableName + "]"; //讀取數據 DataTable table = ExcelToDataSet(fullPath, TSql).Tables[0];
問題解決了