由于各种语言对COM接口的解释不一样,所以同一个COM使用的过程中,语法不太一样。在C#中对OFFICE COM接口的要求比较严格,各种方法函数的参数必须给出。但是很多参数又不清楚是什么意思,这个时候可以使用.NET提供的默认参数功能。
object miss=System.Reflection.Missing.Value;    //可代替有默认参数方法中中的默认参数
定义这个参数后,miss可代替接口中有默认参数的参数。

 

 

ed_4f8e0f90-d655-49f5-b80a-5884ab57b0bb" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />代码
1 应用COM中的EXCEL,添加引用。安装office后都会用excel库的dll。这里用的是9.0
2  using Excel;
3
4 首先要进行垃圾收集
5 GC.Collect();
6
7 Application excel=new ApplicationClass(); //定义一个application对象
8  
9 _Workbook xBk; //定义工作薄
10  _Worksheet xSt; //定义工作表
11  xBk=excel.Workbook.Add(true); //生成一个新的工作薄,会自动生成一个新的工作表,并默认激活
12  xSt=(_Worksheet)xBk.ActiveSheet; //获取当前激活的工作表
13  
14 xSt=(_Worksheet)(xBk.Worksheets.Add(miss,miss,n,miss)); //为工作薄新加n个工作表,默认是在所有工作表之前
15  xSt.Name="新工作表"; //工作表的名称
16  
17 excel中的行号和列号都是从1开始计数的
18 xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).ColumnWidth=10; //设定选定的单元格的宽度,.Width是只读的属性
19  xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).RowHeight=10; //设定选定的单元格的高度,.Height是只读属性
20  
21 xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).Value="编号"; //设定选定单元格中的文本
22 xSt.Cell[1,1]="编号"; //一样的效果
23 xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,2]).Value="编号"; //两个单元格中的文本都是“编号”
24
25 xSt.get_Range(xSt.Cells[1,1],xSt.Cells[1,1]).HorizontalAlignment = XlVAlign.xlVAlignCenter; //设定选定单元格中文本居中对齐
26 xSt.get_Range(xSt.Cells[rowindex,2],xSt.Cells[rowindex,2]).HorizontalAlignment = XlVAlign.xlVAlignJustify; //左对齐
27
28 xSt.get_Range(xSt.Cells[2,1],xSt.Cells[2,7]).Merge(true); //某行1列到7列的单元格进行合并,合并后原来cell[2,8]仍然还是cell[2,8],其他单元格的位置不变
29
30 xSt.get_Range(xSt.Cells[1,7],xSt.Cells[1,7]).NoteText("aaaaa",miss,miss); //某单元格的注释内容
31
32 excel.Visible=true; //设置excel为可视
33
34 xBk.SaveCopyAs(HttpContext.Current.Server.MapPath(".")+"file://%22+filename+%22.xls/"); //将工作薄保存
35
36 操作完excel后代善后工作,关闭excel进程
37 xBk.Close(false, null,null);
38
39 excel.Quit();
40
41 System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
42 System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
43 System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
44
45 xSt = null;
46 xBk = null;
47 excel = null;
48
49 最后还必须再次进行垃圾回收
50 GC.Collect(); 注意这条语句应该和以上的代码不在一个方法中。也就是说将以上的代码封装成一个方法,使用该方法后再进行垃圾回收
51
52
53 最后将生成的excel输出到客户端供用户下载,一并给出
54 private void output(string filename)
55 {
56 string path = HttpContext.Current.Server.MapPath(filename+".xls");
57
58 System.IO.FileInfo file = new System.IO.FileInfo(path);
59 HttpContext.Current.Response.Clear();
60 HttpContext.Current.Response.Charset="GB2312";
61 HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.UTF8;
62 // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
63 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpContext.Current.Server.UrlEncode(file.Name));
64 // 添加头信息,指定文件大小,让浏览器能够显示下载进度
65 HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
66
67 // 指定返回的是一个不能被客户端读取的流,必须被下载
68 HttpContext.Current.Response.ContentType = "application/ms-excel";
69
70 // 把文件流发送到客户端
71 HttpContext.Current.Response.WriteFile(file.FullName);
72 // 停止页面的执行
73
74 HttpContext.Current.Response.End();
75 }
76