分享

C#基于微软EXCEL类库编程小结

 伊本经阁 2012-05-26

C#基于微软EXCEL类库编程小结

对EXCEL2003组件做了一点功课。接下来把几个常用功能做一个简要的说明。

添加引用
Microsoft.Office.Interop.Excel.dll
如果机子上装了Office就会有这个类库,在引用的.NET卡项里面,如果没装,百度一下就有了,然后浏览文件夹添加,效果是一样的

然后,引入命名空间
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop;
using ExcelApplication = Microsoft.Office.Interop.Excel.Application;
最后一句的意思就是把等号后面的命名控件用ExcelApplication 表示,之所以这样做是因为在Excel类库里面,有些类名会和常用类名重复,比如DataRow等,所以在用的时候一定需要用ExcelApplication.DataRow myRow = new ExcelApplication.DataRow()这种方式使用。


现在来实例化一个Excel应用对象,这个对象就是帮助实现EXCEL功能的
由于我的ExcelApplication = Microsoft.Office.Interop.Excel.Application;
所以我直接写为
ExcelApplication xlApp = new ExcelApplication();

Workbook xlBook = xlApp.Workbooks.Add(true);
这句话的意思是在Excel应用里,添加一个工作簿,在EXCEL里面,工作簿就是看得到的.xls文件,我们如果把这个xlApp看成一个文本编辑器,那么工作簿就像文本文件。
这个Add方法需要传入一个对象的引用,如果有现成的工作簿,就传给这个应用,添加到他的工作簿集合里面,当然现在我们需要新建一个,所以载入了一个参数true,这个应该是VB的语法,意思可能就是在内存新声明一个空间,插入一个空白的工作簿

如果常用EXCEL的人就知道新建一个.xls以后,下面会出现三个Sheet,这个Sheet不是什么床单的意思。。是工作表的意思,一个工作簿里面可以有N个工作表
我们现在要对第一个工作表进行操作,所以需要第一个工作表的引用:

Worksheet xlSheet = (Worksheet)xlBook.Worksheets[1];

这里的序号是1而不是0,因为这是VB语法,下标从1开始。
然后说一个类:Microsoft.Office.Interop.Excel.Range 这个Range就是区域的意思,很常用,因为我们在操作EXCEL时,需要先选中一个区域,再进行之后的操作,所以这个Range类就是封装了一些对选取的操作
我们可以这样为Range的对象赋值

Range range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, 9]);

get_Range方法的两个参数就是选取的起止位置,现在我是从 第一行,第一列开始选,到第一行,第九列结束

然后现在我要把这个区域【合并单元格】,只需要把MergeCells属性修改一下就可以了

range.MergeCells = true;

对选取赋值

range.Cells.Value2 = "XXXXX";

这里的Value2属性是一个object,而不是string,因为Excel的单元格是要区分类型的,不同的类型,在单元格里面显示的方式很不同,比如编号0067和数字0067的显示就不一样,默认是将值作为数字,自己可以打开一个Excel试试

然后说几个Range的属性,基本上就可以用C#代码对EXCEL的一些常用功能做一些操作了

range.Cells 选区里的单元格集合
range.Cells.Font 选区中单元格的字体
range.Borders 选区的边框设置
例子:
range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;

上面的语句看着长,其实很简单,把选区中的底边【xlEdgeBottom】的宽度【Weight 】设置为粗【xlThick】

其它上左右,粗细虚线同理

range.Cells.HorizontalAlignment 设置水平显示的位置 居中什么的,可以这样赋值
range.Cells.HorizontalAlignment = Constants.xlCenter;居中

把所有的一切都设置好,赋值完成以后
又来操作工作簿xlBook
把工作簿存储起来,传入一个文件名(包括地址)

xlBook.SaveCopyAs(path);

当然,可以配合保存文件对话框【SavaFileDiag】来做这个操作。

这个时候,我们因为修改了EXCEL,所以工作簿默认的机制是如果修改了没有保存,就会弹出对话框询问是否需要保存,所以这时我们手动把xlBook的Saved属性设置为true。
然后就可以退出应用程序
xlApp.Quit();

最后一点很重要,由于这个类库不是.NET里面的,所以一定要手动用GC回收内存垃圾
其实很简单,一句就搞定
GC.Collect();

最后结合对这个类库编写的经验,以及Excel不能用C写的宏,好像只能用VB等等因素,我觉得EXCEL似乎是VB写的

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约