2023年11月30日发(作者:)

维普资讯

VC中基于ActveX Automaton 技术的EXECL报表实现

西南交通大学周小平杜轶波侯爱黎

Visual c++具有强大的功能,许多软件都用来开发 在利用

VC开发软件时.经常要将数据输出报表,但、c中并没有提供

报表输出的功能模块,Excel具有强大的表格功能,如果将VC中

报表数据输出到Excel中或直接生成Excel报表文档,然后在

sExcelFie):

(daabae.OpenEx(Sq1CDabase:noOdbcDiog))//创建数据库

I即创建Excel文件)

(,/创建表结构(K,QJ,H1,Q1,M12,H2,Q2,M22,M3:为字段名称,

sSql=“CREATE TABLE”+sTableFie+” (K TEXT,QJ TEXT,

HI TEXT.Qi TEXT,M12 TEXT,H2 TEXT,Q2 TEXT,M22 TEXT,M3 TEx ”;

Excel中对该数据进行进一步的格式化处理等操作,是一个高效

便捷的途径:ActveX Automaton是微软公司推出的一个技术标

准,该技术是OLE技术的进一步扩展,允许应用程序之间相互

控制、相互调用。Excel将电子表格暴露为自动化对象,并具有处

理电子表格中的单元、行或列的接口,因此可利用Excel的

XctxeX Mlomae功能,VC编写0I Automaton的客户机,而让

database.ExecutesQL(ssq1)://创建新的Excel文件

CString str;,m

K,

_

Ql,m—H1,m_Q1,m—M12,m_H2,m—Q2,

M22,M3;

/循环将VC中的报表数据写入Excel文件的单元格中。

or(nt..O:<HL d.GetRows 0一l;i++)

Ex(el作为OLE Automaton服务器,通过程序接口实现数据报表

到Exce

m—K=m_grd.GeTexMax(+1;//第1列数据

其他列这里忽略)

1 Excel对象模型概述

要利用Excel的ActeX Automate功能,实现数据报表的输

出.必须与Excel对象模型提供的对象进行交互 Excel提供了数

/建立写入Excel文件的SQL语句

sSql,FommtNSERT INTO”+sTaleFie+”(K,QJ.H1,Q1,M12,H2,

Q2,M22、M3)VALUES(%s’%s’%s’%s’%s’%St'%s’%s’%s’)“,m—K,

nl

百个可能需要与之交互的对象,下面只介绍编程中要用到的儿

个{f象

QJ,m—Hl,m—Q1,m—M12,m—H2.m_Q2,m—M22,m—M3);

datase.ExecuteSQL(sSq1)

Applcaon对象:Applcatn对象提供了大量有关正在运

行的应用程序、应用于该实例的选项以及在该实例中打开的当

前用户的对象的信息?②Workbook对象:Workbook类表示Excel

用程序内的单个工作簿 Workshee!对象:虽然研r …ef类

提供了大量成员.但大部分属性、方法和事件都与Workbook类

提供的成员相同或相似: ̄Range对象:Range对象表示一 单

元格、一行、…列、包含一个或多个单元格块

MessageBox(”Excel文件”+sEx(-elFi ”输出成功!”,”输出到Excel

文件”);//输H1完成

写入完成后Excel中的数据。

定制模板写入方式

3. 利用Excel创建报表的模板文件

Excel具有强大的电子表格制作功能,利用其单元格的拆

分、合并和格式设定,可以方便、快捷地绘制空白表格文档,并可

以随时根据实际情况,重新设定报表格式,生成满足用户要求的

模板文件,实现各种复杂格式的报表。若需要改变表格格式,只

需要将模板文件稍加修改即可。程序将调用模板进行报表输出,

罔1为建立好的模板文件示例。非常重要的一点,就是打印标题

直接生成新的Excel文档,将数据写入

生r艾Extel报表最简单的方式.就是在VC中,通过程序创

建一个新的Excel文件,然后直接将报表数据输出到该Excel文

件中.实现代码如下:

/功能:创建新的Excel文件,并将报表数据输出到泫文件中

、oid CQxhl,:rieTo—Ex(。el(

{CDafahi%e date:

的设置,对于图1所示的模板而言,顶端标题行为¥1:¥4,左端标

题列为¥A:SR,这样对于多页的情况下,每页会自动加上表头标

题。

CFieDialag dig(FAISE.”Ex(el文件”.NULL.OFN

HIDEREAI)ONL'”Excel文件(xls)t*.xls!r'NUI L、:

CSting sex( elFile=dlg.CetPathName 0:/得到要建立的E e1文什

3.2 创建Excel服务器,并打开模板,为写入数据作准备

f(ExeelApp.CreateDipatch(”Exce1.Application",NULL))//如果创建

Excel服务失败,返回

CSl iI rabl Fil :dlg.GdFil Ti 0I,要创建的表名 {AfxMessageB Ⅸ(“创建Excel服务失败 : xi(1)

/创建进行存取的字符串

/打开模板文件,为写人数据作准备 sSq1Fomlat(”DRI\’EP,:f% ):Ds :”:F1RSTRO ̄XrHASNA—MES:1:

ha*path[MAX—PATH]; DB_\”呸s\”:DBQ=% sDriver,sExcel1 P.

READONI Y:FALqE:CRE,]‘

:r

-i-

二__ 1i 二厦T-

.. rj叠 :二:[ Ⅱ团

段养路 问均值统进

3检测日期丁务段名称

车间名称超过统汁值

超过统计值 超过统计值 超过统计值超过统计值

—一_

区段数百分比

值 b-F R. ̄百分比区段数百分比。值区段数百分比区段数百分比:

图1 横板示例

(下转第61页)