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