使用 OLEDB读取 excel(不用Excel对象).

参考: How to read from an Excel file using OLEDB

为了使用方便,我做成了工具类(OledbHelp.cs),好以后使用.

注:连接字符串中,Provider=xx是从这个连接模仿,主要是考虑是否把第1行当成表头: http://www.connectionstrings.com/excel/

OledbHelp.cs类的代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Data.OleDb;
 6 using System.Data;
 7 using System.Collections;
 8 
 9 namespace Oledb {
10     class OledbHelp {
11         public string FileName { get; private set; }
12         private string ConnectString = null;
13 
14         /// <summary>
15         /// if contains header.
16         /// </summary>
17         readonly bool hasHeader = false;
18         public bool HasHeader { get { return hasHeader; } }
19 
20         /// <summary>
21         /// Initialize connection string.
22         /// </summary>
23         /// <param name="fileName">full file name.</param>
24         /// <param name="hasHeader">ture if the .xls file contains header;otherwise false.</param>
25         public OledbHelp(string fileName, bool hasHeader) {
26             if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException("fileName");
27             FileName = fileName;
28             this.hasHeader = hasHeader;
29             ConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=‘" + FileName + "‘;";
30 
31             //specify it contains header.
32             if (HasHeader)
33                 ConnectString += "Extended Properties=‘Excel 12.0 Xml;HDR=YES‘";
34         }
35 
36         public OleDbConnection GetConnection() {
37             return new System.Data.OleDb.OleDbConnection(ConnectString);
38         }
39 
40         public DataSet GetDataSet(string sql, OleDbConnection connection) {
41             OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection);
42             DataSet set = new DataSet();
43             adapter.Fill(set);
44             return set;
45         }
46 
47         /// <summary>
48         /// Get DataRows by specified column-name.
49         /// </summary>
50         /// <param name="set">The input set.</param>
51         /// <param name="columnName">The specified column-name</param>
52         /// <returns></returns>
53         public List<DataRow> GetDataRow(DataSet set, string columnName) {
54             DataTable t = set.Tables[0];    //get the first table as default.
55             List<DataRow> rows = new List<DataRow>();
56             foreach (DataRow r in t.Rows) {
57                 rows.Add((DataRow)r[columnName]);
58             };
59             return rows;
60         }
61     }
62 }

主调用代码:

1 string fileName = @"D:\cs\office\excel\excel_data\tmp.xls";
2             string sql = "select [姓名] from [msg$]"; //可以在sql 语句指定列字段.
3             OledbHelp ole = new OledbHelp(fileName, true);
4             using (OleDbConnection conn = ole.GetConnection()) {
5                 DataSet set = ole.GetDataSet(sql, conn);
6                 dgv.DataSource = set.Tables[0];
7             }

运行的效果:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。