分享

C# winform 开发之Excel操作

 Jcstone 2013-08-01

 C# winform 开发之Excel操作(一)------打开Exce表


在开始之前,先要导入Excel的类库。步骤如下
把鼠标移动解决方案---->右击----->选择“添加引用”---->会出现一个对话框---->选择标题为.net的页面----->然后选择“Microsoft.Office.Interop.Excel”----->单击确定就可以。
之后,你会在解决方案中的引用文件夹中看到名为“Microsoft.Office.Interop.Excel”的组件。
好了,添加了这个引用,自然下一步是在程序中添加它的命名空间,如下:
using Microsoft.Office.Interop.Excel;
或者
using Excel;
这里要声明一下,以上引用方式,并不是所有电脑都适用的。至少,我的不行,呵呵。所以,下面我介绍第三种引用方法:
 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象
即在你要用的地方时候,写上它的命名空间。
下面轮到,实战了。
代码如下:
/// <summary>
        /// 查看Excel表格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button9_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象
                Microsoft.Office.Interop.Excel.Workbook wBook = excel.Application.Workbooks.Add(strpath); //引用Excel工作簿
                excel.Visible = true; //使Excel可视。有兴趣的,设置为false看看效果。
        }
以上代码,是我一个小程序的一部分,叫做点名系统。即从Excel表中读取学号和姓名,显示出来,并读出该学生姓名以及对学生的迟到旷课进行登记,更新Excel表格。在后面,我会提供源程序!
在后面的文章中,我会继续和大家分享Excel的操作。
希望对你,有帮助!
 
 
 

C# winform 开发之Excel操作(二)------读取Excel表格

 

读取Excel方法有多种,这里我主要讲两种方式。
 
方法一:sql语句读取Excel

这种方法,对于连接过数据库的人来说,一定不陌生。

原理大致为:通过select语句读取Excel表的内容,存放在dataset中。这样,我们就可以很方便操作Excel表格。

大致分为以下几步:

记得先添加命名空间:

using System.Data.OleDb;    //Excel表数据操作

1.创建连接,引用协议

 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";

//其中 参数”filePath“,是安放Excel的位置。例如:E:/1.xls。

OleDbConnection OleConn = new OleDbConnection(strConn);

2.打开连接,并执行sql语句,别忘了末尾关闭连接

OleConn.Open();
String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名称,比如sheet2,sheet3等等

//这是要执行的sql语句,你应该不陌生吧!

OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, "Sheet1");
OleConn.Close(); 

 

如果,还不清楚,不怕。下面,我们通过实例来加深理解。

源代码:

 public static DataTable ReadExcel(string filePath)
        {
            try
            {
                string strConn;
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
                OleDbConnection OleConn = new OleDbConnection(strConn);
                OleConn.Open();
                String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名称,比如sheet2,等等

                OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
                DataSet OleDsExcle = new DataSet();
                OleDaExcel.Fill(OleDsExcle, "Sheet1");
                OleConn.Close();

                return OleDsExcle.Tables["Sheet1"];
            }
            catch (Exception err)
            {
                MessageBox.Show("数据绑定Excel失败!失败原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
        }

 

以上代码实现了Excel的读取,并把内容存放在dataset中. 接着,讲解下如何应用该datatable。

方式一:把datatable内容读取到DataGridView中,显示所有Excel内容。
1.先添加DataGridView控件,并命名为dataGridView1
2.添加DataGridView数据绑定语句如下:
DataTable dt;   //存放Excel表的内容
dt=ReadExcel("E://1.xls"); //这里的路径,指的是你Excel表格存放的路径
dataGridView1.DataSource = dt;
就这样,简单的显示,就完成了。

方式二:只显示你先要的内容。这个可以通过把DataTable当做数组来操作。
1.添加一个label标签,命名为label1
2.添加语句;
label1.Text = dt.Rows[x][y].ToString();
//这里的参数 x,y,对应的是你Excel表格的单元格内容。注意下,x,y是从0开始取值。

最后还有一点要说明,就是读取的内容是从Excel表格的第二行开始。第一行,类似于数据库中的字段名,是不读取的。

C# winform 开发之Excel操作(三)------Excel表格处理(增删改)和保存

Excel表格的修改方式有很多。这里我介绍下,我知道的两种方法。

1.通过sql语句,修改。这也是我比较喜欢的方法。因为比较方便,和效率高。对于有数据库基础的,上手也快。

2.通过Excel提供的对象类,进行访问。这种方式,效率比较低,反应慢。因为这个操作过程,是要打开Excel文件的,Excel的开启占去了许多时间。

 

 

方法一:通过sql语句进行修改,方法类似于数据库操作。

下面给出源代码!代码中注释。

 /// <summary>
        /// 通过sql语句,修改并保存Excel
        /// </summary>
        /// <param name="strsql"></param>
        /// <param name="filepath"></param>
        private void DoSql(string strsql, string filepath)//这里的strsql指要执行的sql语句,filepath指Excel的路径,例如"E://1.xls"
        {
                 try
                {
                    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=no;IMEX=0'";//连接Excel OLEDB协议
                    OleDbConnection oledCon = new OleDbConnection(ConnectionString);//创建连接对象
                    oledCon.Open();//开启连接
                    OleDbCommand oledCom = new OleDbCommand(strsql, oledCon);//
                    oledCom.ExecuteNonQuery();//执行sql语句
                    oledCon.Close();//关闭连接
                }
                catch (Exception err)
                {
                    MessageBox.Show("Excel操作失败!失败原因:" + err.Message, "提示信息",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
           

        }

 

下面再给给出一段代码,展示下如何调用上面语句。

首先,拉一个Button控件,和两个textbox

  private void button1_Click(object sender, EventArgs e)
        {

            string num = int.Parse(textBox1.text);

            string xuehao = textBox2.text;

            string strsql = "Update [Sheet1$] set 旷课次数='"+num.ToString()+"' where 学号='"+xuehao+"'";

//修改数据,其中旷课次数,姓名是列名
            DoSql(strsql, "E://1.xls");
        }

 

上面举得例子是更新语句,同理,也可以通过insert语句进行插入,delete语句进行删除。这里简单举例下:

string strsql = "insert into [Sheet1$](旷课次数,姓名) values(12,'张三')";//写入新的数据

string strSql = "delete * from [Sheet1$] where 学号='张三'"; //删除一行

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多