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写的 |
|