visual c#的excle编程_c#应用

2008-02-23 05:42:17来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

0 引言
Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在设计应用系统时,对于不同的用户,他们对于打印的需求是不相同的,假如要使得程式中的打印功能适用于每一个用户,能够想象程式设计是十分复杂的。由于Excel表格的功能强大,又由于几乎每一台机器都安装了他,假如把程式处理的结果放到Excel表格中,这样每一个用户就能够根据自己的需要在Excel中定制自己的打印。这样不但使得程式设计简单,而且又满足了诸多用户的需要,更加实用了。那么用Visual C#如何调用Excel,如何又把数据存放到Excel表格中?本文就来探讨上述问题的解决办法。
1 Excel对象
  微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。
(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。 (2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文档。
(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
2 C#中的受管代码和非受管代码
在.NET公用语言框架内运行的程式为受管代码。受管代码在程式中任何类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程式更为容易,且更少出错,我们能够花更多的时间在解决实际问题上而不是在电脑语言问题上。相对而言,那些在.NET框架外运行的程式为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或调用一个API函数,或用指针去编写实时/高效程式等。
3 Visual C#中调用Excel的COM组件
一个.NET组件事实上是个.NET下的DLL,他包含的不但是运行程式本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。
3.1 将Excel的COM组件转换为.NET组件
在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到“Microsoft Excel 9.0 Object Library”(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文档,以后即可正常使用。
这个转换形成.NET组件不能单独使用,他但是是以前的COM组件的一个外层包装,在.NET中能够通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以他必须和原来的COM组件一起起作用。
3.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.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 ;
3.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;col<fieldcount;col ) xlApp.Cells [1,col 1]=dr.GetName(col);
while (dr.Read ())
{
for(int col=0;col<fieldcount;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 );}
}
}
3.5安装一个使用COM组件的.NET程式
假如要将这样的程式安装运行在另一台机器上,那么除了安装运行程式外,还做三件事。
首先,是安装.NET运行系统。因为任何一个.NET程式都不能离开.NET运行系统去单独运行。
其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但假如是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程式之前必须先安装好。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c#控制windows messenger和windows live messenger窗口发送消息

下一篇: 用c#动态创建access数据库_c#应用