c#写excel_winform窗体应用程序

c#写excel_winform窗体应用程序C#winform开发之Excel操作(一)打开Exce表在开始之前,先要导入Excel的类库。步骤如下:把鼠标移动解决方案>右击->选择“添加引用”>会出现一个对话框>选择标题为.net的页面->然后选择“Microsoft.Office.Interop.Excel”->单击确定就可以。之后,你会在解决方案_一个.net强大的excel控件

c#写excel_winform窗体应用程序



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表格。在后面,我会提供源程序!

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表格的第二行开始。第一行,类似于数据库中的字段名,是不读取的。

Excel表格的第二种读取方法,类似于数组操作。

我们知道Excel是由许多单元格组成,我们可以把这些单元格看作是数组中的元素。而Excel就是数组的集合。

例如表示某个单元格,语句如下:

wSheet.Cells[x, y]

//x,y从1开始,例如wSheet.Cells[2, 3]表示第一行第三列的单元格

举个例子:

 public bool ReadExcel2(string filePath)
        {

           
            try
            {

                                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象
                     Microsoft.Office.Interop.Excel.Workbook wBook = excel.Workbooks._Open(filePath,
Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);    //打开已有的Excel, Missing.Value表示缺省值的意思    
                    excel.Visible = false; //使Excel不可视
                    Microsoft.Office.Interop.Excel.Worksheet wSheet = wBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

               
                 Microsoft.Office.Interop.Excel.Range ra = wSheet.get_Range(wSheet.Cells[2, 3], wSheet.Cells[2, 3]);

//wSheet.Cells[x,y]是不能直接访问的,必须通过转换。

//试试 MessageBox.Show(excel.Cells[2, 3].ToString()) 看有什么结果

                string text = ra.Text.ToString();
                MessageBox.Show(text);
//显示第2行第3列单元格内容

                    wSheet = null;
                    wBook = null;
                    excel.Quit();   //必须关闭,才能有效结束
                    excel = null;
                

                 return true;
            }
            catch (Exception err)
            {
                MessageBox.Show(“Excel操作出错!错误原因:” + err.Message, “提示信息”,
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            finally
            {
            }
       

        }

 

这里说明下,上面的程序要额外添加命名空间,才可以正确运行。

using System.Reflection; // 引用这个才能使用Missing字段

 

显然,这种方法的效率很低,因为它要打开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 学号=’张三'”; //删除一行



方法二:通过Excel对象,操作Excel表格

方法与前面Excel表格读取的方法(C# winform 开发之Excel操作)相同,只是替换下红色字体。

替换如下:

//修改或添加数据

 wSheet.Cells[ x, y] = “修改或添加数据”;

//删除数据

wSheet.Cells[ x, y] = “”;

//x, y 从1开始

C# winform 开发之Excel操作(四)——创建Excel表格

private void CreateExcel()
        {

            try
            {

                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //创建Excel对象
                Microsoft.Office.Interop.Excel.Workbook wBook = excel.Application.Workbooks.Add(Missing.Value); //创建新的Excel工作簿
                         
                excel.Visible = false; //使Excel不可视

 

                //设置禁止弹出保存和覆盖的询问提示框
                excel.DisplayAlerts = false;
                excel.AlertBeforeOverwriting = true;

 

                //保存
                wBook.SaveAs(@”E:/a.xls“,
                Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value,
                Missing.Value, Missing.Value);

 

                wBook = null;
                excel.Quit();   //必须关闭,才能有效结束
                excel = null;

            }
            catch (Exception err)
            {
                MessageBox.Show(“Excel操作出错!错误原因:” + err.Message, “提示信息”,
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
               
            }
            finally
            {
            }
        }

 

这里说明下,上面的程序要额外添加命名空间,才可以正确运行。

using System.Reflection; // 引用这个才能使用Missing字段



今天的文章c#写excel_winform窗体应用程序分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58289.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注