Sampson-Li
Sampson.Li学习经验总结博客 学历代表过去,能力代表现在.学习力代表未来!
 1 ///<summary>
2 ///读取xls\xlsx格式的Excel文件的方法
3 ///</ummary>
4 ///<param name="path">待读取Excel的全路径</param>
5 ///<returns></returns>
6 private DataTable ReadExcelToTable(string path)
7 {
8 //连接字符串
9 string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本不能出现多余的空格 而且分号注意
10 //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
11 //Office 07以下版本 因为本人用Office2010 所以没有用到这个连接字符串 可根据自己的情况选择 或者程序判断要用哪一//个连接字符串
12 using(OleDbConnection conn = new OleDbConnection(connstring))
13 {
14 conn.Open();
15 DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"}); //得到所有sheet的名字
16 string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
17 string sql = string.Format("SELECT * FROM [{0}],firstSheetName); //查询字符串
18 OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring);
19 DataSet set = new DataSet();
20 ada.Fill(set);
21 return set.Tables[0];
22 }
23 }
24
25
26 ///<summary>
27 ///读取csv格式的Excel文件的方法
28 ///</ummary>
29 ///<param name="path">待读取Excel的全路径</param>
30 ///<returns></returns>
31 private DataTable ReadExcelWithStream(string path)
32 {
33 DataTable dt = new DataTable();
34 bool isDtHasColumn = false; //标记DataTable 是否已经生成了列
35 StreamReader reader = new StreamReader(path,System.Text.Encoding.Default); //数据流
36 while(!reader.EndOfStream)
37 {
38 string meaage = reader.ReadLine();
39 string[] splitResult = message.Split(new char[]{','},StringSplitOption.None); //读取一行 以逗号分隔 存入数组 DataRow row = dt.NewRow();
40 for(int i = 0;i<splitResult.Length;i++)
41 {
42 if(!isDtHasColumn) //如果还没有生成列
43 {
44 dt.Columns.Add("column" + i,typeof(string));
45 }
46 row[i] = splitResult[i];
47 }
48 dt.Rows.Add(row); //添加行
49 isDtHasColumn = true; //读取第一行后 就标记已经存在列 再读取以后的行时,就不再生成列
50 }
51 return dt;
52 }
posted on 2011-11-17 11:50  Sampson  阅读(2977)  评论(0编辑  收藏  举报