.Net对EXCEL COM的使用总结(C#)

.Net对EXCEL COM的使用总结(C#)
在前段时间的工作中由于要实现.NET中WEB数据导出为EXCEL成报表,大量使用了EXCELCOM组件。现将使用过程中的一些问题和技巧进行总结。
微软提供对excel COM的说明C:\Program Files\Microsoft Office\Office\2052\VBAXL9.CHM
还有对其他OFFICE COM的说明基本上都是以VB开头的,其也是以VB为例子讲解的。由于各种语言对COM接口的解释不一样,所以同一个COM使用的过程中,语法不太一样。在C#中对OFFICE COM接口的要求比较严格,各种方法函数的参数必须给出。但是很多参数又不清楚是什么意思,这个时候可以使用.NET提供的默认参数功能。
object miss=System.Reflection.Missing.Value;    //可代替有默认参数方法中中的默认参数
定义这个参数后,miss可代替接口中有默认参数的参数。应用COM中的EXCEL,添加引用。安装office后都会用excel库的dll。这里用的是9.0
using Excel;首先要进行垃圾收集
GC.Collect();Application excel=new ApplicationClass(); //定义一个application对象_Workbook xBk; //定义工作薄
_Worksheet xSt; //定义工作表
xBk=excel.Workbook.Add(true); //生成一个新的工作薄,会自动生成一个新的工作表,并默认激活
xSt=(_Worksheet)xBk.ActiveSheet; //获取当前激活的工作表 xSt=(_Worksheet)(xBk.Worksheets.Add(miss,miss,n,miss));  //为工作薄新加n个工作表,默认是在所有工作表之前
xSt.Name="新工作表"; //工作表的名称excel中的行号和列号都是从1开始计数的
xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).ColumnWidth=10; //设定选定的单元格的宽度,.Width是只读的属性
xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).RowHeight=10;  //设定选定的单元格的高度,.Height是只读属性xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).Value="编号"; //设定选定单元格中的文本
xSt.Cell[1,1]="编号"; //一样的效果
xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,2]).Value="编号"; //两个单元格中的文本都是“编号”xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).HorizontalAlignment = XlVAlign.xlVAlignCenter; //设定选定单元格中文本居中对齐
xSt.get_Range(xSt.Cells[rowindex,2],xSt.Cells[rowindex,2]).HorizontalAlignment = XlVAlign.xlVAlignJustify; //左对齐xSt.get_Range(xSt.Cells[2,1],xSt.Cells[2,7]).Merge(true); //某行1列到7列的单元格进行合并,合并后原来cell[2,8]仍然还是cell[2,8],其他单元格的位置不变 xSt.get_Range(xSt.Cells[1,7],xSt.Cells[1,7]).NoteText("aaaaa",miss,miss); //某单元格的注释内容excel.Visible=true; //设置excel为可视xBk.SaveCopyAs(HttpContext.Current.Server.MapPath(".")+"\\"+filename+".xls"); //将工作薄保存操作完excel后代善后工作,关闭excel进程
xBk.Close(false, null,null);
               
excel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);xSt = null;
xBk = null;
excel = null;