C#处理Excel,在Excel中新加了一页,完成后会excel弹出输入框一个确认框,如何在程序中处理而不需人工去点按钮。

您所在的位置: &
几条C#的Excel编程技巧
几条C#的Excel编程技巧
Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。这里我们将介绍几条C#的Excel相关编程技巧
在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来。这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,在程序中处理数据库中的数据比其处理Excel表格中的数据容易许多。那么如何用Visual C#的Excel表格中的数据?在以前用Delphi编程的时候,对于不同的用户,他们对于打印的需求是不一样的,如果要使得程序中的打印功能适用于每一个用户,可以想象程序设计是十分复杂的。这时想到Excel,由于Excel表格的功能强大,又由于几乎每一台机器都安装了它,如果把程序处理的结果放到Excel表格中,这样每一个用户就可以根据自己的需要在Excel中定制自己的打印。这样不仅使得程序设计简单,而且又满足了诸多用户的要求,更加实用了。那么用Visual C#的Excel,如何又把数据存放到Excel表格中?本文就来探讨一下上述问题的解决办法。
一.C#的Excel程序设计及运行环境
(1).微软视窗2000 服务器版
(2)..Net Framework SDK Beta 2
(3).Microsoft Data Access Component 2.6以上版本(MDAC2.6)
(4).Office 2000套件
二.Visual C#的Excel表格中的数据:
本节将通过一个程序来介绍Visual C#读取Excel表格中的数据,并把数据以DataGrid的形式显示出来。
(1).如何读取数据:
其实读取Excel表格中的数据和读取数据库中的数据是非常类似的,因为在某种程度上Excel表格可以看成是一张一张的数据表。其二者的主要区别在于所使用的数据引擎不一样。在本文的程序中,通过下列代码实现读取Excel表格数据,具体如下:&string&strCon&=&"&Provider&=&Microsoft.Jet.OLEDB.4.0&;&Data&Source&=&c:\\sample.Extended&Properties=Excel&8.0"&; &OleDbConnection&myConn&=&new&OleDbConnection&(&strCon&)&; &string&strCom&=&"&SELECT&*&FROM&[Sheet1$]&"&; &myConn.Open&(&)&; &file:&OleDbDataAdapter&myCommand&=&new&OleDbDataAdapter&(&strCom&,&myConn&)&; &file:&myDataSet&=&new&DataSet&(&)&; &file:&myCommand.Fill&(&myDataSet&,&"[Sheet1$]"&)&; &file:&myConn.Close&(&)&;&
怎么样读取Excel表格中的数据其实和读取数据库中的数据没有什么实质上的区别。
注释:这里读取的是C盘根目录下的"Sample.xls"文件。
(2).用DataGrid来显示得到的数据集:
在得到DataSet对象后,只需要通过下列二行代码,就可以把数据集用DataGrid显示出来了:DataGrid1.DataMember=&"[Sheet1$]"&; &DataGrid1.DataSource&=&myDataSet&;&
(3).用Visual C#读取Excel表格,并用DataGrid显示出来的程序代码(Read.cs)和程序运行的界面:
掌握了上面二点,水到渠成就可以得到以下代码:using&System&; &using&System.Drawing&; &using&System.Collections&; &using&ponentModel&; &using&System.Windows.Forms&; &using&System.Data&; &using&System.Data.OleDb&; &public&class&Form1&:&Form &{ &private&Button&button1&; &private&System.Data.DataSet&myDataSet&; &private&DataGrid&DataGrid1&; &private&ponentModel.Container&components&=&null&; &public&Form1&(&) &{ &file://初始化窗体中的各个组件 &InitializeComponent&(&)&; &file://打开数据链接,得到数据集 &GetConnect&(&)&; &} &file://清除程序中使用过的资源 &protected&override&void&Dispose&(&bool&disposing&) &{ &if&(&disposing&) &{ &if&(&components&!=&null&) &{ &components.Dispose&(&)&; &} &} &base.Dispose&(&disposing&)&; &} &private&void&GetConnect&(&) &{ &file://创建一个数据链接 &string&strCon&=&"&Provider&=&Microsoft.Jet.OLEDB.4.0&;&Data&Source&=&c:\\sample.Extended&Properties=Excel&8.0"&; &OleDbConnection&myConn&=&new&OleDbConnection&(&strCon&)&; &string&strCom&=&"&SELECT&*&FROM&[Sheet1$]&"&; &myConn.Open&(&)&; &file://打开数据链接,得到一个数据集 &OleDbDataAdapter&myCommand&=&new&OleDbDataAdapter&(&strCom&,&myConn&)&; &file://创建一个&DataSet对象 &myDataSet&=&new&DataSet&(&)&; &file://得到自己的DataSet对象 &myCommand.Fill&(&myDataSet&,&"[Sheet1$]"&)&; &file://关闭此数据链接 &myConn.Close&(&)&; &} &private&void&InitializeComponent&(&) &{ &DataGrid1&=&new&DataGrid&(&)&; &button1&=&new&Button&(&)&; &SuspendLayout&(&)&; &DataGrid1.Name&=&"DataGrid1"; &DataGrid1.Size&=&new&System.Drawing.Size&(&400&,&200&)&; &button1.Location&=&new&System.Drawing.Point&(&124&,&240&)&; &button1.Name&=&"button1"&; &button1.TabIndex&=&1&; &button1.Text&=&"读取数据"&; &button1.Size&=&new&System.Drawing.Size&(84&,&24&)&; &button1.Click&+=&new&System.EventHandler&(&this.button1_Click&)&; &this.AutoScaleBaseSize&=&new&System.Drawing.Size&(&6&,&14&)&; &this.ClientSize&=&new&System.Drawing.Size&(&400&,&280&)&; &this.Controls.Add&(&button1&)&; &this.Controls.Add&(&DataGrid1&)&; &this.Name&=&"Form1"&; &this.Text&=&"读取Excle表格中的数据,并用DataGrid显示出来!"&; &this.ResumeLayout&(&false&)&; &} &private&void&button1_Click&(&object&sender&,&System.EventArgs&e&) &{ &DataGrid1.DataMember=&"[Sheet1$]"&; &DataGrid1.DataSource&=&myDataSet&; &} &static&void&Main&(&) &{ &Application.Run&(&new&Form1&(&)&)&; &} &}&
下图是程序编译后,运行结果:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="用Visual C#读取Excel" src="/files/uploadimg/5050.jpg">
图01:用Visual C#读取"c:\sample.xls"的运行界面
(4).总结:
以上只是读取了Excel表格中"Sheet1"中的数据,对于其他"Sheet"中的内容,可以参照读取"Sheet1"中的程序,只作一点修改就可以了,譬如要读取"Sheet2"中的内容,只需要把"Read.cs"程序中的"Sheet1$"改成"Sheet2$"就可以了。
三.Visual C#的Excel表格,并在Excel表格中存储数据:
在Visual C#中调用Excel表格,并不像读取Excel表格中的数据那么容易了,因为在Visual C#中调用Excel表格要使用到Excel的COM组件。如果你安装Office套件在"C"盘,那么在"C:\Program Files\Microsoft Office\Office"可以找到这个COM组件"EXCEL9.OLB",在《Visual C#如何使用Active X组件》一文中,这些COM组件都是非受管代码的,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的类库。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
(1).非受管代码COM组件转换成受管代码的类库:
首先把COM组件"EXCEL9.OLB"拷贝到C盘的根目录下,然后输入下列命令:
tlbimp excel9.olb
这样在C盘的根目录下面就产生了三个DLL文件:"Excel.dll"、"Office.dll"、"VBIDE.dll"。在产生了上面的三个文件后,这种转换就成功完成了。在下面的程序中,就可以利用这转换好的三个类库编写和Excel表格相关的各种操作了。
(2).Visual C#打开Excel表格:
在"Excel.dll"中定义了一个命名空间"Excel",在差命名空间中封装了一个类"Application",这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Application&excel&=&new&Excel.Application&(&)&; &excel.Application.Workbooks.Add&(&true&)&; &excel.Visible&=&true&;&&
但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。
(3).往Excel表格中输入数据:
在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个下单元。通过给差"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Application&excel&=&new&Excel.Application&(&)&; &excel.Application.Workbooks.Add&(&true&)&; &excel.Cells[&1&,&1&]&=&"第一行第一列"&; &excel.Cells[&1&,&2&]&=&"第一行第二列"&; &excel.Cells[&2&,&1&]&=&"第二行第一列"&; &excel.Cells[&2&,&2&]&=&"第二行第二列"&; &excel.Cells[&3&,&1&]&=&"第三行第一列"&; &excel.Cells[&3&,&2&]&=&"第三行第二列"&; &excel.Visible&=&true&;&&
(4). Visual C#调用Excel表格,并在Excel表格中存储数据的程序代码(Excel.cs):
了解了上面的这些知识,得到完成上述功能的程序代码就显得比较容易了,具体如下:using&System&; &using&System.Drawing&; &using&System.Collections&; &using&ponentModel&; &using&System.Windows.Forms&; &using&System.Data&; &using&System.Data.SqlClient&; &public&class&Form1&:&Form &{ &private&Button&button1&; &private&ponentModel.Container&components&=&null&; &public&Form1&(&) &{ &file:&InitializeComponent&(&)&; &} &file:&protected&override&void&Dispose&(&bool&disposing&) &{ &if&(&disposing&) &{ &if&(&components&!=&null&) &{ &components.Dispose&(&)&; &} &} &base.Dispose(&disposing&)&; &} &private&void&InitializeComponent&(&) &{ &button1&=&new&Button&(&)&; &SuspendLayout&(&)&; &button1.Location&=&new&System.Drawing.Point&(&32&,&72&)&; &button1.Name&=&"button1"&; &button1.Size&=&new&System.Drawing.Size&(&100&,&30&)&; &button1.TabIndex&=&0&; &button1.Text&=&"调用Excel文件!"&; &button1.Click&+=&new&System.EventHandler&(&button1_Click&)&; &AutoScaleBaseSize&=&new&System.Drawing.Size&(&5&,&13&)&; &this.ClientSize&=&new&System.Drawing.Size&(&292&,&273&)&; &this.Controls.Add&(&button1&)&; &this.Name&=&"Form1"&; &this.Text&=&"如何用Visual&C#调用Excel表格!"&; &this.ResumeLayout&(&false&)&; &} &static&void&Main&(&) &{ &Application.Run&(&new&Form1&(&)&)&; &} &private&void&button1_Click&(&object&sender&,&System.EventArgs&e&) &{ &Excel.Application&excel&=&new&Excel.Application&(&)&; &excel.Application.Workbooks.Add&(&true&)&; &excel.Cells[&1&,&1&]&=&"第一行第一列"&; &excel.Cells[&1&,&2&]&=&"第一行第二列"&; &excel.Cells[&2&,&1&]&=&"第二行第一列"&; &excel.Cells[&2&,&2&]&=&"第二行第二列"&; &excel.Cells[&3&,&1&]&=&"第三行第一列"&; &excel.Cells[&3&,&2&]&=&"第三行第二列"&; &excel.Visible&=&true&; &} &} &&
(5).编译源程序和程序运行界面:
在经过了下列命令编译后:
Csc.exe /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /r:excel.dll /r:office.dll /r:vbide.dll excel.cs
就可以得到"Excel.exe",运行后界面如下:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="运行后界面" src="/files/uploadimg/5051.jpg">&
图02:Visual C#调用Excel表格,并存储数据的程序运行界面
四.Visual C#处理Office套件中的其他成员程序:
本文虽然只介绍了Visual C#在处理Excel表格中经常遇到的一些问题的解决方法,但其实对Office套件的其他成员也有很强的借鉴意义,譬如Visual C#来处理Word文档,在调用Word文档的时候,必须先完成COM组件从非受管代码到受管代码的转换,Word的COM组件位"MSWORD9.OLB",经过转换后也会产生三个DLL文件,但分别是"Word.dll"、"Office.dll"、"VBIDE.dll"。其实在Visual C#中调用Word,也非常容易。只需要把调用Excel表格中的代码换成调用Word的代码就可以了,具体如下:Word.Application&word&=&new&Word.Application&(&)&; &word.Application.Visible&=&true&;&
不信你试一下,看看是否达到你的要求。对于针对Word的其他的操作,总体来说和对Excel表格的操作相类似。由于针对Word只是一个文档,程序对Word进行的操作是比较少的,所以就不一一介绍了。
五.C#的Excel编程技巧总结:
本文介绍Visual C#来处理Excel表格的几种最常遇到的情况,虽然针对的只是Excel表格,但对其他Office套件中的成员也具有十分的借鉴意义。【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM
我原本是个C程序员,阴差阳错,步入Java大门,转眼十余年...
又到了一周的末尾,闷热过后,这周的温度算是降下来了
掌握一门技术,首要的是掌握其基础。笔者从事.NET相关
再过十几天很多同学又要爬楼梯睡觉,早上七点起床,晚
本书是在《网管员必读―网络基础》(第1版)基础上修改而成的。全书共分9章,分别介绍计算机网络概述(修改)、数制(新增)、网
51CTO旗下网站c#导出excel后编辑提示改xls可能含有与网页不兼容的功能,并且保存后会有一个含有网页的文件夹,如何在导出excel的时候设置?
[问题点数:40分,结帖人tohert]
c#导出excel后编辑提示改xls可能含有与网页不兼容的功能,并且保存后会有一个含有网页的文件夹,如何在导出excel的时候设置?
[问题点数:40分,结帖人tohert]
只显示楼主
取消只显示楼主
相关推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。在VB中处理excel_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
在VB中处理excel
在​V​B​中​处​理​e​x​c​e​l
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢C# 将多个datatable中的内容分别导入到一个Excel中的多个sheet中,该怎么解决,请各位高手帮帮我吧!_百度知道
C# 将多个datatable中的内容分别导入到一个Excel中的多个sheet中,该怎么解决,请各位高手帮帮我吧!
C# winform中 将多个datatable中的内容分别导入到一个Excel中的多个sheet中,该怎么解决,请各位高手帮帮我吧!我都快疯了·最好是源码注意:是多个datatable分别导入到一个Excel中的多个sheet工作表中哦
提问者采纳
强烈建议你使用第三方组件——ASPOSE.EXCEL 几句代码就能搞定你说的问题;aspose支持动态创建WorkSheet,以及导入DataTable对象;网上有aspose的破解,你可以很容易搞到。
其他类似问题
为您推荐:
您可能关注的推广
datatable的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何在Excel中击下单元格或图片,就弹出一个提示框内容?_百度知道
如何在Excel中击下单元格或图片,就弹出一个提示框内容?
我看见高手的Excel文件有这样的功能,如单击一下某个单元格或工作表中插入的图形,就会弹出一个提示框,提示框里还有他写的文字内容。《弹出的“提示框”就如同电脑系统常弹出的提示框一样。》----请问:这是怎么实现的??
提问者采纳
这要用到VBA设在Sheet1中的A1选定则弹出对话框按Alt+F11进入VBA环境,进入Sheet1模块 录入以下就行Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
MsgBox &Input message.&, vbOKOnly + vbInformation, &title&
End IfEnd Sub
其他类似问题
为您推荐:
excel的相关知识
其他2条回答
数据 && 有效性 && 输入信息
用VBA做的一个控件。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 excel如何弹出对话框 的文章

 

随机推荐