Visual C# 编程操作Excel

2016-02-19 16:17 44 1 收藏

下面,图老师小编带您去了解一下Visual C# 编程操作Excel,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

  摘要:本文介绍了Excel对象、C#中的受管代码和非受管代码,并介绍了COM组件在.NET环境中的使用。

  关键词:受管代码;非受管代码;Excel对象;动态连接库

  引言

  Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在设计应用系统时,对于不同的用户,他们对于打印的需求是不一样的,如果要使得程序中的打印功能适用于每一个用户,可以想象程序设计是十分复杂的。由于Excel表格的功能强大,又由于几乎每一台机器都安装了它,如果把程序处理的结果放到Excel表格中,这样每一个用户就可以根据自己的需要在Excel中定制自己的打印。这样不仅使得程序设计简单,而且又满足了诸多用户的要求,更加实用了。那么用Visual C#如何调用Excel,如何又把数据存放到Excel表格中?本文就来探讨上述问题的解决办法。

  Excel对象

  微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。

  (1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。

  (2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。

  (3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。

  (4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

  C#中的受管代码和非受管代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。

  Visual C#中调用Excel的COM组件

  一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。

  1、将Excel的COM组件转换为.NET组件

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。

  这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。

  2、Visual C#打开Excel表格

  事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。

  在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

  

Excel.Application excel = new Excel.Application ();//引用Excel对象excel.Application.Workbooks.Add ( true );//引用Excel工作簿excel.Visible = true ;//使Excel可视

  但此时的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 ] = "First Row First Column" ;excel.Cells[ 1 , 2 ] = "First Row Second Column" ;excel.Cells[ 2 , 1 ] = "Second Row First Column" ;excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;excel.Visible = true ; 

  4、实例

  下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。

  

string cnString="Provider=msdaora.1;Data source=Name; ";cnString=cnString+"user id=UserName;password=Password";try{ OleDbConnection cn=new OleDbConnection (cnString); cn.Open (); try {  string s="select * from Name.TableName";  OleDbCommand cmd=new OleDbCommand (s,cn);  OleDbDataReader dr=cmd.ExecuteReader ();  Excel.Application xlApp = new Excel.Application();  if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}  xlApp.Application .Workbooks .Add (true);  int row=2,fieldcount;  fieldcount=dr.FieldCount ;  for(int col=0;colfieldcount;col++) xlApp.Cells [1,col+1]=dr.GetName(col);  while (dr.Read ())  {   for(int col=0;colfieldcount;col++)    xlApp.Cells [row,col+1]=dr.GetValue(col).ToString();    row++;  }  xlApp.Visible =true;  xlApp=null; } catch(Exception ex ){MessageBox.Show (ex.Message );} finally {cn.Close();}}catch(Exception ex){MessageBox.Show (ex.Message );}}}

  5、安装一个使用COM组件的.NET程序

  如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。

  首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。

  其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。

  最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows Registry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。

  小结

  通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。也使我们了解了在C#中如何使用COM组件。

  参考文献:

  [1] 刘洪成 C#高级编程 清华大学出版社 2003.7工作 187~200

来源:http://www.tulaoshi.com/n/20160219/1611535.html

延伸阅读
C#(发音为See Sharp)是简单、现代、面向对象和类型安全的编程语言。C#起源于C语言家族,因此,C,C++和Java的程序员很快就能熟悉它。C#已经获得了ECMA International和ISO/IEC的国际标准认证,它们分别是ECMA-334标准和ISO/IEC 23270标准。Microsoft用于.NET框架的C#编译器就是根据这两个标准实现的。 C#是面向对象的语言,但C#进一...
本文就来着重探讨一下 Visual C# 数据库基本编程,即:如何浏览记录、修改记录、删除记录和插入记录。针对 数据库 编程始终是程序设计语言的一个重要方面的内容,也是一个难点。数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据库、得到需要的数据和针对数据记录的浏览、删除、修改、插入等操作。其中又以后面针...
C#中有两种类型:值类型(value type)和引用类型(reference type)。值类型变量直接包括它们的数据,而引用类型变量存储的是它们的数据引用,后者被认为是对象。对于引用类型,有可能两个变量引用相同的对象,因此对其中一个变量的操作可能影响另一个对象引用的对象。对于值类型,每个变量都有自己的数据拷贝,因此对一个变量的操作不可...
表达式(expression)由操作数(operand)和运算符(operator)构成。表达式的运算符标明在操作数上运用了哪种操作。运算符的例子包括+、-、*、/和new。操作数的例子包括字面值、字段、局部变量和表达式。 当表达式包括多个运算符时,运算符的优先级(precedence)控制各个运算符执行的顺序。例如,表达式x+y*z将以x+(y*z)的形式计算...
首先是如何创建、打开、读取、写入、保存的一般性代码:using System; using System.Reflection; namespace CExcel1 { class Class1 { [STAThread] static void Main(string[] args) {//创建Application对象 Excel.Application xApp=new Excel.ApplicationClass(); xApp.Visible=true; //得到WorkBook对象, 可以用两种方式之一: 下面...

经验教程

209

收藏

58
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部