由于客户对Excel的使用都比较熟悉了。所以在我们的系统中输出报表的时候都需要输出为Excel。我使用的是VS 2003 其中对使用Excel没有提供很方便的工具。只能自己把Excel的Com组件添加进来。
但是在使用Com组件提供的类型的时候,很多方法的返回值或者参数都是object.不知道实际的类型。使用起来很困难。
下面将我所用过的各种功能的C# 写发都列出来.
1.启动Excel进程
Excel.Application m_objExcel = new Excel.Application(); //这个过程很简单。new 一个对象就可以了。
2.打开一个Excel文件。
在向Excel文件中写东西的时候,一般是先打开一个已经存在的文件,由于输出报表的时候都是需要模版的。所以我们的系统中都是这样。如何建立一个空白的Excel文件的问题还没有解决。
Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBooks.Open (excelFilePath,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing ,Type.Missing );
其中excelFilePath是Excel文件的路径。其它的都是Type.Missing。
3.获取 Worksheet
m_objBook = m_objBooks.get_Item (1);
Excel.Sheets m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
Excel._Worksheet m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
Worksheet是实际可以写数据的东西,就是我们在Excel中看到的一页页的东西。
4.获取Range
在操作Cell的时候可以使用Cell和Range。Range就是多个Cell。但是一个Cell也可以作为Range。
Excel.Range m_objRange=(Excel.Range)=m_objSheet.getRange("A1","D5");
注意这个制定Range范围的参数,是先列后行的。而且列使用一个两个字母来表示。和你在Excel中看到的一样。
5.写数据
写数据有两种方式。一种是直接写到特定的Cell中.
m_objSheet.Cells[5,6]=1568.36;
还有一种就是使用Range或者Cell.
m_objRange.Value2=1568.36;
6.控制Range的颜色.
我控制颜色的时候是使用其Interior.ColorIndex来指定。如下所示:
Interior .ColorIndex=35;
应该还有别的方法,但是我没有进一步研究。使用这个已经够用了。
7.控制Range的边框
边框通过Range的Borders属性来控制,代码如下:
range.Borders[Excel.XlBordersIndex .xlEdgeTop].LineStyle =Excel.XlLineStyle .xlContinuous;
Excel.XlBordersIndex是一个枚举,可以用来指定是哪一个边框。边框本身还有一些属性可以进一步控制。这里就不一一列举了。
8.合并单元格
合并单元格需要分两步走。首先需要获取一个Range 这个Range就是需要合并的单元格的左上角和右下角确定的。然后设置Range的MergeCells为true.
m_objRange=m_objSheet.getRange("A1","D6");
m_objRange.MergeCells=true;
9.设置对齐方式
直接看代码:
m_objRange.VerticalAlignment =Excel.XlVAlign.xlVAlignCenter;
m_objRange.HorizontalAlignment =Excel.XlHAlign .xlHAlignCenter ;
10。设置内容格式
Excel默认将所有的内容都识别为数子,这样有些不方便。有时候输出的内容不是数据,但是也是一串数字,比如编号等,这个时候Excel就会帮倒忙了。所以需要指定格式
m_objRange.NumberFormatLocal="@";//这样就可以表示是文本了
m_objRange.NumberFormatLocal="0.00_";//这个表示是一个数字但是保留两位小数。