写下这篇博客来记录自己的工作,这部分功能是读取Excel表格中的数据,并通过c#中的datagridview控件将读取的数据显示出来。为了方便用户,我设计了一个read按钮,用户点击这个按钮,会弹出打开文件的窗口,选择想要打开的文件后,datagridview中会显示读取的表格数据。
程序运行截图如下:
主要代码如下:
首先引用要System.Data.OleDb;
using System.Data.OleDb;
点击read按钮弹出打开文件的窗口:
private void button1_Click(object sender, EventArgs e) { OpenFileDialog openfile = new OpenFileDialog(); openfile.Filter = "表格(*.xls)|*.xls|所有文件(*.*)|*.*"; if (openfile.FilterIndex == 1 && openfile.ShowDialog() == DialogResult.OK) ExcelToDS(openfile.FileName); }
需要在Designer.cs文件中添加最下面的一行代码:
// button1 // this.button1.Location = new System.Drawing.Point(12, 12); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 0; this.button1.Text = "read"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); //
读取数据显示在datagrid中:
public DataSet ExcelToDS(string path) { //源的定义 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + @path + ";" + "Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn);//连接数据源 conn.Open(); //Sql语句 string strExcel = ""; OleDbDataAdapter myCommand = null; DataSet ds = null; strExcel = "select * from [sheet1$]"; myCommand = new OleDbDataAdapter(strExcel, strConn);//适配到数据源 ds = new DataSet();//定义存放的数据表 myCommand.Fill(ds, "table1"); dataGridView1.DataSource = ds.Tables["table1"]; return ds; }
很简单的代码,但是问题就出在连接字符串上面,后面一定要加上Extended Properties='Excel 8.0;
一切就像操作数据库一样,只是需要注意的是:数据提供程序使用Jet,同时需要指定Extended Properties 关键字设置 Excel 特定的属性。
不同版本的Excel对应不同的属性值:
对于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0;
对于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0;
对于 Microsoft Excel 4.0 工作簿,请使用 Excel 4.0;
对于 Microsoft Excel 3.0 工作簿,请使用 Excel 3.0。