Excel编程[C#]

                                MS    Excel 编程处理(C#)

  背景:

MS Excel是MS Corp 办公自动化套件中的一个软件,主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在目前常见的系统设计与开发中,Excel数据文件常常被用来作为一数据载体来充当数据输入源以及数据导出文件类型,因此熟悉基于MS Corp提供的Excel组件进行开发是每个MIS开发人员必备技能.

  Excel组件简单介绍

 MS Corp的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.在本文中,只介绍最常使用的四个对象,它们分别是:
   (1) Application对象:Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
   (2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
   (3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
   (4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。

   受管代码和非受管代码  
  受管代码即我们平时说的托管代码,对于Net framework而行,我们可以把基于Net CLR运行时环境运行并且受其管理的代码视为受管代码.受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,我们编写程序更为容易,且减少出错机会,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在不受Net CLR管理而运行的程序为非受管代码。比如常见COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。
     对于Net组件或程序集而言,它不仅仅包括代码本身,还包括这个组件的描述信息.但对于COM组件而言,它是用类型库(TLB,即Type Library)来存储其描述信息(即元数据).
    若要在基于Net Framework编写的程序使用非托管的COM组件,需先将其转换为托管的Net组件.以Excel COM组件对象而言,我们可以通过两类方法实现转换:
   方法一:借助VS.Net开发环境在添加Excel对象库引用自动转换;
   方法二:借助Net Framework自带的tlbImp.exe来实现转换

注:通过上述两类方法进行转换后的Net组件并不能单独使用,它仅仅是之前的COM组件一外层包装,Net CLR通过该包装去加载调用执行之前COM组件真正的代码.
 
     Visual C# 操作Excel组件
   通过将类型库转化为托管的net组件后,可以直接调用Excel命名空间或其下命名空间的类进行数据处理
如:创建一个工作簿,同时将Excel界面设置为可见  
Excel.Application excel = new Excel.Application ();//引用Excel对象
excel.Application.Workbooks.Add ( true );//引用Excel工作簿
excel.Visible = true ;//使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 ; 

操作工作表(WorkSheet):
1. 增加工作表对象
  其中,book为一Workbook对象实例
    object val =  System.Reflection.Missing.Value;
    Excel.Worksheet sheetObj = (Excel.Worksheet)book.Worksheets.Add(book.ActiveSheet,val,val,val);
    sheetObj.Name = "测试工作表";  ///工作表名字
 上面代码是在当前活动工作表前增加一名为"测试工作表"的工作表

2.删除工作表对象
   直接获得要删除的WorkSheet对象,调用其Delete()即可.

3. 在工作表中进行数据处理,可直接调用其Cells集合操作(注行号与列号均从1开始)

4. 退出保存工作簿对象
  book.SaveAs("d:\\Book2.xls", Type.Missing, Type.Missing,
      Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
      Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing);

   book.Close(Type.Missing, Type.Missing, Type.Missing);
   excel.Workbooks.Close();
     excel.Quit();
     System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
     System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
     book= null;
     excel= null;
     GC.Collect();


    部署使用COM组件的Net程序
   在部署一个使用COM组件的Net程序到其他机器时,目标机器应该至少具备如下2个环境条件:
  条件一:Net CLR必须成功安装;
  条件二:所调用的COM组件必须存在于目标机器,并且必须完成注册;
 

posted @ 2006-12-19 13:16  刘杨兵  阅读(1161)  评论(0编辑  收藏