Visual C#操作Excel详解(Word版).doc_第1页
Visual C#操作Excel详解(Word版).doc_第2页
Visual C#操作Excel详解(Word版).doc_第3页
Visual C#操作Excel详解(Word版).doc_第4页
Visual C#操作Excel详解(Word版).doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC的Excel编程Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来。这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,在程序中处理数据库中的数据比其处理Excel表格中的数据容易许多。那么如何用VisualC读取Excel表格中的数据?在以前用Delphi编程的时候,对于不同的用户,他们对于打印的需求是不一样的,如果要使得程序中的打印功能适用于每一个用户,可以想象程序设计是十分复杂的。这时想到Excel,由于Excel表格的功能强大,又由于几乎每一台机器都安装了它,如果把程序处理的结果放到Excel表格中,这样每一个用户就可以根据自己的需要在Excel中定制自己的打印。这样不仅使得程序设计简单,而且又满足了诸多用户的要求,更加实用了。那么用VisualC如何调用Excel,如何又把数据存放到Excel表格中。本文就来探讨一下上述问题的解决办法。一程序设计及运行环境(1)微软视窗2000服务器版(2).NetFrameworkSDKBeta2(3)MicrosoftDataAccessComponent2.6以上版本(MDAC2.6)(4)Office2000套件二VisualC读取Excel表格中的数据本节将通过一个程序来介绍VisualC读取Excel表格中的数据,并把数据以DataGrid的形式显示出来。(1)如何读取数据其实读取Excel表格中的数据和读取数据库中的数据是非常类似的,因为在某种程度上Excel表格可以看成是一张一张的数据表。其二者的主要区别在于所使用的数据引擎不一样。在本文的程序中,通过下列代码实现读取Excel表格数据,具体如下:/创建一个数据链接stringstrCon=Provider=Microsoft.Jet.OLEDB.4.0DataSource=c:sample.xls;ExtendedProperties=Excel8.0OleDbConnectionmyConn=newOleDbConnection(strCon)stringstrCom=SELECT*FROMSheet1$myConn.Open()file:/打开数据链接,得到一个数据集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn)file:/创建一个DataSet对象myDataSet=newDataSet()file:/得到自己的DataSet对象myCommand.Fill(myDataSet,Sheet1$)file:/关闭此数据链接myConn.Close()怎么样读取Excel表格中的数据其实和读取数据库中的数据没有什么实质上的区别。注释:这里读取的是C盘根目录下的Sample.xls文件。(2)用DataGrid来显示得到的数据集在得到DataSet对象后,只需要通过下列二行代码,就可以把数据集用DataGrid显示出来了:DataGrid1.DataMember=Sheet1$DataGrid1.DataSource=myDataSet(3)用VisualC读取Excel表格并用DataGrid显示出来的程序代码(Read.cs)和程序运行的界面掌握了上面二点,水到渠成就可以得到以下代码:usingSystemusingSystem.DrawingusingSystem.CollectionsusingSystem.ComponentModelusingSystem.Windows.FormsusingSystem.DatausingSystem.Data.OleDbpublicclassForm1:FormprivateButtonbutton1privateSystem.Data.DataSetmyDataSetprivateDataGridDataGrid1privateSystem.ComponentModel.Containercomponents=nullpublicForm1()InitializeComponent()/初始化窗体中的各个组件GetConnect()/打开数据链接,得到数据集/清除程序中使用过的资源protectedoverridevoidDispose(booldisposing)if(disposing)if(components!=null)components.Dispose()base.Dispose(disposing)privatevoidGetConnect()/创建一个数据链接stringstrCon=Provider=Microsoft.Jet.OLEDB.4.0DataSource=c:sample.xls;ExtendedProperties=Excel8.0OleDbConnectionmyConn=newOleDbConnection(strCon)stringstrCom=SELECT*FROMSheet1$myConn.Open()/打开数据链接,得到一个数据集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn)file:/创建一个DataSet对象myDataSet=newDataSet()/得到自己的DataSet对象myCommand.Fill(myDataSet,Sheet1$)/关闭此数据链接myConn.Close()privatevoidInitializeComponent()DataGrid1=newDataGrid()button1=newButton()SuspendLayout()DataGrid1.Name=DataGrid1;DataGrid1.Size=newSystem.Drawing.Size(400,200)button1.Location=newSystem.Drawing.Point(124,240)button1.Name=button1button1.TabIndex=1button1.Text=读取数据button1.Size=newSystem.Drawing.Size(84,24)button1.Click+=newSystem.EventHandler(this.button1_Click)this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14)this.ClientSize=newSystem.Drawing.Size(400,280)this.Controls.Add(button1)this.Controls.Add(DataGrid1)this.Name=Form1this.Text=读取Excle表格中的数据,并用DataGrid显示出来!this.ResumeLayout(false)privatevoidbutton1_Click(objectsender,System.EventArgse)DataGrid1.DataMember=Sheet1$DataGrid1.DataSource=myDataSetstaticvoidMain()Application.Run(newForm1()(4)总结以上只是读取了Excel表格中Sheet1中的数据,对于其他Sheet中的内容,可以参照读取Sheet1中的程序,只作一点修改就可以了,譬如要读取Sheet2中的内容,只需要把Read.cs程序中的Sheet1$改成Sheet2$就可以了。三VisualC调用Excel表格,并在Excel表格中存储数据在VisualC中调用Excel表格,并不像读取Excel表格中的数据那么容易了,因为在VisualC中调用Excel表格要使用到Excel的COM组件。如果你安装Office套件在C盘,那么在C:ProgramFilesMicrosoftOfficeOffice可以找到这个COM组件EXCEL9.OLB,在VisualC如何使用ActiveX组件一文中,这些COM组件都是非受管代码的,要在VisualC中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的类库。所以在用VisualC调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。(1)非受管代码COM组件转换成受管代码的类库首先把COM组件EXCEL9.OLB拷贝到C盘的根目录下,然后输入下列命令:tlbimpexcel9.olb这样在C盘的根目录下面就产生了三个DLL文件:Excel.dll、Office.dll、VBIDE.dll。在产生了上面的三个文件后,这种转换就成功完成了。在下面的程序中,就可以利用这转换好的三个类库编写和Excel表格相关的各种操作了。注释:1在安装的程序中或许找不到excel9.olb,可以利用下面的命令格式获取dll文件Tlbimpexecel.exe也可以生成文件Excel.dll,VBIDE.dll2也可以使用VisualS2003或其以上版本添加引用找到Excel.exe文件,会自动转化为excel.dll文件,然后在程序中添加包含即可例如:usingExcel;请根据包的不同情况添加。(2)VisualC打开Excel表格:在Excel.dll中定义了一个命名空间Excel,在差命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在VisualC中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Applicationexcel=newExcel.ApplicationClass()excel.Application.Workbooks.Add(true)excel.Visible=true但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。(3)往Excel表格中输入数据:在命名空间Excel中,还定义了一个类Cell,这个类所代表的就是Excel表格中的一个下单元。通过给差Cell赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Applicationexcel=newExcel.ApplicationClass()excel.Application.Workbooks.Add(true)excel.Cells1,1=第一行第一列excel.Cells1,2=第一行第二列excel.Cells2,1=第二行第一列excel.Cells2,2=第二行第二列excel.Cells3,1=第三行第一列excel.Cells3,2=第三行第二列excel.Visible=true(4)VisualC调用Excel表格,并在Excel表格中存储数据的程序代码(Excel.cs)了解了上面的这些知识,得到完成上述功能的程序代码就显得比较容易了,具体如下:usingSystemusingSystem.DrawingusingSystem.CollectionsusingSystem.ComponentModelusingSystem.Windows.FormsusingSystem.DatausingSystem.Data.SqlClientpublicclassForm1:FormprivateButtonbutton1privateSystem.ComponentModel.Containercomponents=nullpublicForm1()file:/初始化窗体中的各个组件InitializeComponent()file:/清除程序中使用的各个资源protectedoverridevoidDispose(booldisposing)if(disposing)if(components!=null)components.Dispose()base.Dispose(disposing)privatevoidInitializeComponent()button1=newButton()SuspendLayout()button1.Location=newSystem.Drawing.Point(32,72)button1.Name=button1button1.Size=newSystem.Drawing.Size(100,30)button1.TabIndex=0button1.Text=调用Excel文件!button1.Click+=newSystem.EventHandler(button1_Click)AutoScaleBaseSize=newSystem.Drawing.Size(5,13)this.ClientSize=newSystem.Drawing.Size(292,273)this.Controls.Add(button1)this.Name=Form1this.Text=如何用VisualC调用Excel表格!this.ResumeLayout(false)staticvoidMain()Application.Run(newForm1()privatevoidbutton1_Click(objectsender,System.EventArgse)Excel.Applicationexcel=newExcel.Application()excel.Application.Workbooks.Add(true)excel.Cells1,1=第一行第一列excel.Cells1,2=第一行第二列excel.Cells2,1=第二行第一列excel.Cells2,2=第二行第二列excel.Cells3,1=第三行第一列excel.Cells3,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.dllexcel.cs就可以得到Excel.exe,运行后界面如下四VisualC处理Office套件中的其他成员程序本文虽然只介绍了VisualC在处理Excel表格中经常遇到的一些问题的解决方法,但其实对Office套件的其他成员也有很强的借鉴意义,譬如VisualC来处理Word文档,在调用Word文档的时候,必须先完成COM组件从非受管代码到受管代码的转换,Word的COM组件位MSWORD9.OLB,经过转换后也会产生三个DLL文件,但分别是Word.dll、Office.dll、VBIDE.dll。其实在VisualC中调用Word,也非常容易。只需要把调用Excel表格中的代码换成调用Word的代码就可以了,具体如下:Word.Applicationword=newWord.Application()word.Application.Visible=true不信你试一下,看看是否达到你的要求。对于针对Word的其他的操作,总体来说和对Excel表格的操作相类似。由于针对Word只是一个文档,程序对Word进行的操作是比较少的,所以就不一一介绍了。五、总结本文介绍VisualC来处理Excel表格的几种最常遇到的情况,虽然针对的只是Excel表格,但对其他Office套件中的成员也具有十分的借鉴意义。程序示例及常见问题:前提:首先要把Excel加入到引用,加入方法见:非受管代码COM组件转换成受管代码的类库示例1:读取一个模板excel文件另存为另外一个excel文件usingSystem;usingExcel;namespaceExcelOperator.ClassExcelpublicclassExample1privateDateTimebeforeTime; /Excel启动之前时间privateDateTimeafterTime;/Excel启动之后时间privatestringOriginalPath;privatestringCurrentPath;publicExample2(stringCurrentPath,stringOriginalPath)this.OriginalPath=OriginalPath;this.CurrentPath=CurrentPath;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/声明excel对象beforeTime=DateTime.Now;/获取excel开始启动时间excel=newExcel.ApplicationClass();/创建对象实例,这时在系统进程中会多出一个excel进程afterTime=DateTime.Now;/获取excel启动结束的时间tryobjectmissing=System.Reflection.Missing.Value;/Missing用于调用带默认参数方法。objectreadOnly=true;excel.Visible=false;/是否显示excel文档/OpenOriginalExcelFileexcel.Application.Workbooks.Open(OriginalPath,missing,readOnly,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Excel.WorkbookmyBook=excel.Workbooks1;/Workbooks从1开始计数的Excel.WorksheetmySheet=(Excel.Worksheet)myBook.Worksheets3;/从1开始计数的Excel.Ranger=mySheet.get_Range(mySheet.Cells1,17,mySheet.Cells65231,17);/获取矩形选择框r.NumberFormatLocal=XlColumnDataType.xlTextFormat/设置该矩形框的文本格式/SaveAsOriginalExcelFileToCurrentPathmySheet.SaveAs(CurrentPath,missing,missing,missing,missing,missing,missing,missing,missing,missing);/释放Excel对象,但在AWeb程序中只有转向另一个页面的时候进程才结束/可以考虑使用KillExcelProcess()杀掉进程/ReleaseComObject方法递减运行库可调用包装的引用计数。详细信息见MSDNSystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);System.Runtime.InteropServices.Marshal.ReleaseComObject(r);myBook.Close(null,null,null);excel.Workbooks.Close();r=null;mySheet=null;myBook=null;missing=null;readOnly=null;excel.Quit();excel=null;catch KillExcelProcess();Finally/可以把KillExcelProcess();放在该处从而杀掉Excel的进程privatevoidKillExcelProcess()System.Diagnostics.ProcessmyProcesses;DateTimestartTime;myProcesses=System.Diagnostics.Process.GetProcessesByName(Excel);/得不到Excel进程ID,暂时只能判断进程启动时间foreach(System.Diagnostics.ProcessmyProcessinmyProcesses)startTime=myProcess.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论