VC操作EXCEL

时间:2024-11-13 17:13:53
Excel 为发人员提供了强大的外部接口,方便开发人员进行二次开发。最近笔者就采用 excel automation 技术成功地解决了 excel 报表的自动生成功能.

首先给大家介绍一下报表创建模块的组成,如下图所示

 

 

模版文件。由于笔者设计的报表都是周期性的固定报表,做成模版更适合数据的读写操作和图表的生成,所以将全部的报表归纳整理生成了几类模版。

      模版描述文件。主要纪录数据写在那个行那个列,那个图表对应什么类型的数据。它跟随模版文件的变更一起变更,时刻与模版文件保持同步,这样可以不必修改程序就能够更改输出报表的格式。

      数据源描述文件。主要描述对应文件的源数据所在的那种数据库。

 

接下来给大家介绍一下程序操作excel的流程:

一、插入类型库

1、              在一个已有的MFC工程按Ctrl + W 弹出ClassWizard对话框。

2、              Add Class.../From a type Library... Office 目录中,找到你想使用的Excel类型库。若你安装的是Offce2000则选择安装目录下的文件进行倒入,生成的倒入文件名称叫做;若你安装的时office2003则选择。选择安装目录下进行到入,生成的倒入文件时。两者的部分接口有所不同。

3、              在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况而定。当然你也可以全选

说明:类型库会给出Excel的全部接口类,可以根据需要挑选自己需要的类,但是一般情况下的EXCEL文的操作都会涉及以下的几个类:_ApplicationWorkBooks_WorkBookWorkSheets_WorkSheetRange。若涉及图表的操作还会涉及如下的几个类:ChartObjectsChartObject_ChartSeries

 

二、服务的启动和关闭

      服务器的启动

 

说明:

           在此之前要添加CoInitialize(NULL)函数初始化Com接口。

关键词""是启动ExcelCOM服务的唯一标示。

SetVisible函数表示运行的进程是否可见。

SetDisplayAlerts函数表示是否忽略警告信息,比如提示“文件已经存在是否覆盖?”,SetDisplayAlerts的参数为FALSE则不出现提示信并默认覆盖。

服务的关闭

三、文件的打开与保存

      文件的打开

 

文件的保存

说明:

           对于文件的保存2000版和2003版有所区别,2000版比2003版少了一个参数。

四、操作的退出

上面提到得服务的退出不代表文件就关闭了,当服务停止后内存中依然驻留着一个进程必须杀掉该进程才算完整的退出。实现代码如下:

 

数据操作
      1 .获取 sheet

注意: sheet 名称必须在文件中存在,否则程序抛出异常。为了适应不同文件的操作,此处的 sheet 名称可通过配置文件进行动态配置。
2. 获取 range
3.指定行列的数据获取
4.数据的填写
5. 数据区域的拷贝
假如有一个表格高度变量是 dTableHeight ,宽度变量是 dTableWidth, 将其拷贝若干份,每个表格之间相隔一行实现代码如下:
图表操作
Excel 提供了功能强大的图表处理功能,我们可以轻而易举的绘制各类统计报表。如下图所示我们将对局有固定模版的图表进行处理。
 
 
1.              获得图表
注意:变量 ChartNo 表示图表的排序值,即属于一个 sheet 中的第几个图表,该排序值是根据用户创建图表的顺序自动生成的。
2.              设定曲线
要实现曲线的,就必须准确的描述曲线。曲线描述信息是一个序列化的字符串,它包含四个部分,每个部分之间依靠逗号分隔:
1.              图表的 title.
2.              图表的 x 周描述信息
3.              显示曲线所基于的数据区域描述
4.              单一图表内的曲线排序值(曲线 id
其中某些项目可以不设,系统将取默认值,最终形成的序列化格式如下:
=SERIES(" 示例 ", 数据 !$A$4:$A$34, 数据 !$C$4:$C$34,1), 也可以省略指定 x 坐标
=SERIES(" 示例 ", , 数据 !$C$4:$C$34,1)
注意:设定的数据内不得出现没有值得现象。比如基于数据区域 a1:a100 形成一条曲线,若 a30 的位置无数据(指的是区域空而非零)则程序抛出异常。