c# operate excel file _c#应用

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

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

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#中的受管代码和非受管代码

  在.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组件

  在项目中打开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 ("Cant 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 );}
}
}

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

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

标签:

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

上一篇: 如何用c#来部署数据库 _c#应用

下一篇: .net框架集webclient类向wince平台上传文档(ftp方式)延迟15秒