Excel 2000:用Delphi自动生成报表
在Delphi中实现Excel的自由报表
.
2 ・ 8
Co pu e Er N o m tr a .1 20 2 1 0
在 De h 中实现 E cl 自由报表 l i p xe 的
吴 以 才
( 江 大 学计 划 财务 部 ,浙 江 杭 州 3 0 2 浙 1 0 7)
绍 设 计 中 几 个 关 键 的技 术 问 题 。
Ol. e jc. pi t nAci W id w. s I G^ I e = eOlObe t Ap la i . t e n o Di a c o v p y di s: n
Tr e; u
e ; nd
po e ue e o to m.tS v Cl kS n e: rc d rTR p r r B n a e i ( e d r F c TObe t; jc)
, ,
“ 打
开 ”、 保存”、 页面设置 ”、 预览 ”、 打 印”、 计算 ” 能按 “ “ “ “ “ 功
Tr e; u
工摘录不仅费时 麻烦 , 而且容 易出错 。 如何把 E cl x e 的强大功能
和业 务应 用系统 中灵 活特殊 的数 据处理功 能结合起 来 , 对软件 人员非常有实 用意义。 D lh 是一套 非常 强有 力的开发 工具 , ep i 她能 利用 Wid ws no 的 O E技术 , L 实现在程序 中与 E cl x e 的紧密 集成 。下面 主要介
en d;
2 )在窗 口内放 上 q  ̄ la, 名为 T oB r ,建 立 相应 q oB r命 o o l al 的 按 钮 T pe B t m, 分 别 命 名 为 Bn p n Bn ae S ed ut o tO e , tS v ,
Delphi编程实现Excel报表自动生成和发布
Delphi编程实现Excel报表自动生成和发布文章介绍如何使用Delphi 编程通过定义报表内容描述、Excel 模板文件和服务器描述文件实现Oracle 数据库和Excel 模板文件的数据交换,并以Ftp 方式自动发布到Web 数据发布平台。
标签:Delphi;Excel模板;报表定义;Ftp1 引言随着计算机应用技术的快速发展,Excel 电子表格的普及,工作中常常需要从不同的信息管理系統中查询统计数据并以Excel 表格方式展现报表。
由于行业或者业务部门需求的变化,导致报表格式、种类繁多。
一些复杂报表,需求在软件开发期间都无法明确,为了解决此类问题,采用了表格功能强大的Excel 作为报表模板,Delphi 程序根据报表数据定义动态填入数据,完成数据填充后以Ftp 方式上传填写完数据的文件到Web 数据发布平台,从而实现Excel 报表的自动生成和发布功能。
2 实现原理2.1 按照业务部门的需求,根据需要的报表格式,编辑好Excel报表模板文件;根据报表的数据内容和区域,编写好报表定义文件。
2.2 以报表定义文件文件名作为运行的参数,在操作系统下创建批处理命令,并可以根据实际需要把批处理加入操作系统的计划任务,实现按程序自动运行。
2.3 程序根据报表定义文件的描述,主要做如下操作:①读取指定的Excel 模板文件;②到指定的数据库服务器查询数据并填充Excel 模板文件;③以Ftp 方式上传生成好的Excel报表文件到FTP服务器。
3 实现过程描述3.1 报表定义文件采用可扩展标记语言(XML文件描述),主要内容描述如下:report nameD:\xxxx\template_xxx.xlsD:\xxxx\xxxxxx.xls1ftp server nameftp remote dir……database name1n1,n2,n3,n4select col1,col2,… from table_name…………在Delphi 中使用控件解析方法生成XML 文件接口框架代码,通过生成的接口单元读取XML 文件,主要代码如下:Var xmlReport:IXMLReportType;//定义报表定义文件变量……xmlReport := LoadReport(报表定义XML文件);//读取报表定义文件if length(trim(xmlReport.Ftpserver))>0 then //是否指定FTP上传服务器uplaodFile(xmlReport.output);//上传文件到Ftp服务器……3.2 服务器定义文件文件格式同报表定义文件,主要内容及描述如下:server name user/pwd@ip:port:sid……ftp server namexxx.xxx.xxx.xxx215000usernamepassword……Delphi 处理该文件方法同上,根据指定服务器名称取查找服务器子节点,主要代码如下://根据指定的FTP名称,取服务器定义文件中FTP 中节点for i := 0 to xmlServers.Ftp.ChildNodes.Count - 1 do beginif (trim(xmlServers.Ftp.server[i].Name)= trim(serverName))then begin result := xmlServers.Ftp.server[i];exit;end;end;3.3 采用第三方數据库控件ODAC 访问Oracle 数据库ODAC 全称Oracle Data Access Components,是Oracle 数据存取组件,直接使用Oracle 接口(OCI),在应用中建立连接可以使用ODAC Net 选项无需在客户机上安装Oralce 客户端,仅需TCP/IP 支持,本次开发中使用了TOraSession 和TOraQuery 两个控件,主要代码如下:if oraSession.Connected then oraSession.Close;//关闭数据库连接oraSession.ConnectString := getOracleServerNode (OracleServerNname).ConnectString;//修改连接字串,函数getOracleServerNode 返回变量Oracle 服务器节点;oraSession.Connect;//连接数据库;ToraQuery 的使用方法同Delphi 中TQuery;3.4 Oracle 数据集填充Excel 数据区域根据指定数据区域和SQL语句向Excel模板文件中填写数据,注意点:SQL 语句运行结果和指定数据区域要一一对应。
Delphi中利用Excel实现动态报表的生成
处可 以通过 设计 窗体 控件 ,灵 活设 置查 询字段 和 查询 条件 等
Ad Qu r 1Ac ie = r e: o ey . t :T u v Ad Qu r 1 Fr t o e y .i ; s
f r = d Qu r 1F l .o n 一 0, 写 入 查 询 加 o m: 0t A o e y .i d C u t 1d / o e s
E c Ip la i 、E c l o k o k乖 x eWo k h e 三 个 组 × e pi t n x e A c o W rb o 口E c l r e t s
件 ,通 过 这 些 组件 可 以轻 易建 立 与 数 据库 的连 接 ,使 用 D lh ep i Ecl x e 文件 输 出数据 报 表 ,以 方便查 看 与打 印 ,满足 用户 数据 报 表 要求 ,实 现动 态报 表 的生成 。
编 程 控 制将 S QL查 询 的 数 据 输 出 到 E c l 象 中 ,并 通 过 W oko k[】 /工作 簿与 E c l 用程序 连接 xe对 rb o s1)/ xe应 W okh es1 a _ rs e t /工作 表 与工作 簿连 接 rse t[】 s wokh e) ;
Em pt yPa旧 m Em pt I yPar am , Em pt yPar am , Em p yPar t am ,
一
、
实 现 思 路
D lh 在 其 组 件 工 具 箱 的 S res页 中 提 供 了 ep i ev r
Em p yPar t am , Em p yPa am , Em pt t r yPar m , Em pt a yPar m , a
成数据 的动 态报 表生 成 。
如何在Delphi中操作Excel
如何在Delphi中操作Excel在数据库应用软件的开发过程中,经常需要把数据转换成Excel文件,让用户作进一步的数据处理。
而Delphi是开发数据库应用系统的常用工具,那么,如何在Delphi中操作Excel呢?我们知道,在Microsoft Office软件中有一种内嵌的编程语言VBA,它是一种宏语言,利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据和设置字体等。
另一方面,Microsoft Office软件中的宏能以VBA代码的形式记录下你的操作过程。
因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入到你的软件中。
但是VBA也存在一个缺点,它必须有Microsoft Office作平台,在哪里编写,必须在哪里执行。
例如在Excel下编写的一段VBA代码,则它只有在Excel下才能运行。
因此,笔者的方法就是把VBA代码嵌入到Delphi中,从而实现用Delphi操作Excel。
下面,我们以Delphi程序为例,说明这种调用方法:Unit excel;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs, StdCtrls,ComObj;//ComObj是操作OLE对象的函数集type TForm1 =class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);vareclApp,WorkBook:Variant;//声明为OLE Automation 对象xlsFileName:string;beginxlsFileName:=‘ex.xls‘;try//创建OLE对象Excel Application与 WorkBookeclApp:=CreateOleObject(‘Excel.Application‘);WorkBook:=CreateOleobject(‘Excel.Sheet‘);exceptShowMessage(‘您的机器里未安装Microsoft Excel。
Delphi控制Excel生成统计报表研究
Ke wo d : e p i y r s D l h ;Ex e ;Re o td s n;Ac o n e r cl p r ei g cu t pt ro
数据报表作为企事业单位上报和下达的重要 信息载体 , 随着信息化建设程度的不断深入 , 在实
际用 。因此 , 据 数 报表 已经成 为 管 理 信息 系统 中重 要 的一 项 功 能 ,
下:
() 1 程序执行时 , E cl 让 xe应用程序前台运行
作者简介 : 张有华 ( 9 0 , , 17 一) 男 讲师 , 硕士 , 主要从事数据库 , 演化计算方 面的应用研究.
维普资讯
第 2期
张有华等 : e h 控 制 E cl Dl i p xe 生成统计报表研究
.
Ab t a t E c li e mo t o u a aa e r d v l p n o s s r c : x e s t s p p lrd tr p t e eo i g t l.Ho o U e De h l o t lE c l o f ih te h o o w t S p i c n r x e n s o t i h d t o d t b s e t e aa e o te c a g sman y i t d c d,a d a t a ie u ig E c lt k a aa f m aa a e b t n d tr p r x h n e i r w il n r u e o n cu l s x e o ma e d ・ z n
办公常用的电子表格制作工具 , 由于其易操作性 和实用性, 到 了各行业办公人员 的青睐。本文 得 介绍如何利用 D l i e h 编程 自动生成 E cl p xe报表。
delphi excel 例程
delphi excel 例程Delphi Excel 例程:一步一步回答在Delphi中,我们可以使用Excel 例程来实现与Excel文件的交互。
Excel 例程是一组可以通过Delphi编程语言来操作Excel文件的方法和函数。
本文将介绍如何使用Delphi和Excel 例程来创建、读取、写入和操作Excel 文件。
第一步:安装Excel 例程要开始使用Delphi和Excel 例程,我们首先需要安装Excel 例程库。
这可以通过三种方法之一来实现:1. 使用ActiveX组件:在Delphi IDE的“Component”菜单下,选择“Import ActiveX Control”。
在弹出的窗口中,选择“Microsoft Excel xx.x Object Library”(其中"xx.x"表示Excel版本号),然后点击“Install”按钮进行安装。
2. 使用第三方库:你还可以使用第三方库,如TExcelComponent或Flexcel,它们提供了更多的功能和灵活性。
3. 编写自己的Excel 例程:如果你对编程充满信心,你可以自己编写一组Excel 例程,以与Excel文件交互。
不过,这需要一些时间和努力。
第二步:创建一个新的Excel文件在使用Delphi和Excel 例程之前,我们首先需要创建一个Excel文件。
下面是示例代码,展示了如何使用Excel 例程来创建和保存一个新的Excel文件:delphivarExcelApp: Variant;ExcelWorkbook: Variant;ExcelWorksheet: Variant;begin创建Excel应用程序对象ExcelApp := CreateOleObject('Excel.Application');创建一个新的工作簿ExcelWorkbook := ExcelApp.Workbooks.Add;获取第一个工作表ExcelWorksheet := ExcelWorkbook.Worksheets.Item[1];设置单元格的值ExcelWorksheet.Cells[1, 1].Value := 'Hello'; ExcelWorksheet.Cells[1, 2].Value := 'World!';保存工作簿ExcelWorkbook.SaveAs('C:\NewExcelFile.xlsx');关闭Excel应用程序ExcelApp.Quit;end;通过这段代码,我们可以创建一个新的Excel应用程序对象,并在其中创建一个新的工作簿。
在Delphi中如何选择字段动态生成Excel报表
【 摘 要 】 用 D 1h 设计界面 , :利 e i p 实现将数据库 系统 中的数据 , 根据 用户选择 字段 , 态生成 E cl 动 xe 报表 , 实现 了打 印部
分数 据 的 目的 。
【 关键 宇】 D lh 选择 字段 : ep i
引言
E cl xe 报表
, 便 在 Ls o l中 , 以 it x B
. 址 , 作单位 。 工 邮政 编 码 , 子 邮 箱 , 庭 电话 , 动 电话 , Q , 电 家 移 Q 照 23实 现 代码 及说 明 ( ) F r 对 象 的 O C e t 件 下 , 加 代 码 , 现 当 窗 1 在 om n ra e事 添 实 片 , 注 . 十 四个 字段 。 备 共 体 建 立 时 。 A O u rl数 据 集 中 的 cn c 表 的 所 有 字 段 ( 将 D Q ey ot t a 除 22界 面 设 计 . 照 片 字 段 外1添 加 到 Ls o l 件 中 , , it x组 B 以供 用 户选 择 。 ( ) 建 一 D lh 应 用 程 序 , 存 单 元 文 件 为 E u i. a 1新 e i p 保 R nt ps。 部分关键代码 : 保 存 工 程 为 E Po c . p R rj t d r。 e f C u t t A O u r1 i d o n 1 d o io n: o D Q e . e C t o r yF l u 一 首 字段个数次 环 ( ) 窗 体 上 添 加 一 个 P gC nrl 件 , 认 N m 2在 ae ot 组 o 默 a e属 性 为 b gn e i Pg C nrl a e o t l。为 了使 PgC nrl 充 满 整 个 窗 体 ,设 置 Pg. o ae ot l o ae iA O ur1 i d[ o n .i d a eo f D Q ey . e s C u tFe N m 照片 t n Fl i ] l h e C nrl o t l的 A i o l n属 性 为 aC i t g l l n 。在 P g C nrl 上 单 击 右 键 . e ae o t l o
Delphi中调用Excel制作报表的方法
ec x dA ; a c
eclp l ai 1Vs l[] t e xeapi t n .ibe1: r ; c o i =u nm ) a e;
。
关键词
D lh ep i
E cl xe
OE L
文献 标 识 码
报表
售楼系统
中 图分 类 号
T 31 .2 P 15
B 文 章 编 号 : 0 2 2 2 2 0 01 0 6 - 2 1 0 — 4 2( 0 7) - 0 1- - 0
M eh d o a i g Re o t Usn c li lh t o f M k n p r ig Ex e n Dep i
a d sr s Su" o e b o cee e a l. n ie O le c d y a c n rt x mpe c
Ke wo d y r Dep i l h E cl x e OL E Re o pr t Bu li g s l n y tm i n - e l g S se d i
将 Dl i ep 中数 据输 出给 E cl h xe 处理 ,则可满足用 户要
求 ,保 持原有 数据 资源 基础 上在 E cl x e 中灵活地 作二 次处 理。笔 者在开发基于 CS模式的售楼管理 系统时, / 提供给客 户端调用 E c l 作的报表简便 、 xe制 可靠 , 得到 了成功应用 。
熟 悉 的 工 具 为 用 户 服 务 , 少 重 复 编 程 。至 于 对 既 含 文 字 , 减
又含有 数字 , 甚至 还有 图片的输 出报表 来说 , E cl 为 用 xe 作 工 具比较 合适 , 因为 E cl 的每个 单 元格 (e )都可 控 xe 中 cl 1 制, 很适合制 作表格 。 D lh 中的 G i 网格 ) 据在格 式上与 E cl ep i r d( 数 xe 工作 表 十分接近 , 使用 O E技术 创建 E cl L xe 的对象 , 然后通过循 环 将 D lh 中的 G d数据输 出到 E cl ep i i r xe 的单元格里 ,就可 以 在 E cl xe 中随意设 置数据的格式和 使用 这些数据 了。 2 调用 E cl xe 制作 报表的实现代码 T tnG i T B r Sr g r i d和 D G i d对象 是 D lh 中用 于存放数 据 e i p
DELPHI编程控制Excel自动生成报表
DELPHI编程控制Excel自动生成报表摘要Excel是当前最时髦的数据报表制作道具。
本文介绍问号应用DELPHI编程来控制Excel完成数据库Databnse与报表之间的数据交换研讨了报表制作工程中的一部份细节性疑难问题。
关键字DELPHI编程Excel报表引言数据报表作为企事业公司上报和下达的重要消息载体随着消息化建设的不断推进在实际的务工中得到了前所未有的实际运用。
因此数据报表已经成了管制消息操作系统中重要的一项功能并且由于数据的多样性和来访量情况消息的渐增数据报表的操作系统呈现变得愈来愈复杂。
DELPHI编程是唯一高效的可视化数据库Databnse管制消息操作系统开发道具.但是DELPHI编程开发环境中帮助的报表控件在制作复杂报表时显得不够理想不管是以前版本帮助的Quick Report控件组还那样DELPHI编程7帮助的Rave控件组都别让用户对生成的报表停止改动且程式控制很难呈现。
Excel作为现代办公日常的电子表格制作道具以它的易操作性和实战性得到了各业界办公大家的青睐。
本文根据实际实际运用实践介绍利用DELPHI编程编程控制Excel生成报表的各种窍门。
DELPHI编程控制Excel的窍门 1 创建Excel 文档要在DELPHI编程中控制Excel就必需用到OLE自动化。
目前一般采用OLE2来创建OLE对象当激活唯一OLE对象时效劳器程式仅在容器程式内部激活这就所谓的“就地激活”in-place activation。
创建Excel文档时先创建唯一OLE对象然后在对象中建立务工表worksheet如参数createExcel所示function createExcel:variant var v:variant sheet:variant begin v:createoleobjectExcel.Application//创建OLE对象v.visible:true v.workbooks.add-4167 //添加务工表:testsheet:v.workbooks1.sheetstest return v end 2 数据表格控制Excel表格的控制主要包括数据的导入、改正单元格的合并、边框的控制表格的复制、粘贴等。
DELPHI控制EXCEL2000操作全集
Delphi控制Excel2000操作全集十分值得收藏的咚咚,对认为有用的人很有用,呵呵-----------------------------------------Delphi控制Excel2000希望这分数据,为论坛中的各位会员关于EXCEL操作的问题提供一些帮助。
同时也希望各位能将自己整理的、或已有的资料共享出来。
这样可以减少大家的「重复劳动」吗?技术在于交流,经验在于积累!!!!一.使用动态创建的方法首先创建Excel对象,使用ComObj:var ExcelApp:Variant;ExcelApp:=CreateOleObject('Excel.Application');1)显示当前窗口:ExcelApp.Visible:=True;2)更改Excel标题栏:ExcelApp.Caption:='应用程序调用Microsoft Excel';3)添加新工作簿:ExcelApp.WorkBooks.Add;4)打开已存在的工作簿:ExcelApp.WorkBooks.Open('C:\Excel\Demo.xls');5)设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;或ExcelApp.WorksSheets['Sheet2'].Activate;6)给单元格赋值:ExcelApp.Cells[1,4].Value:='第一行第四列';7)设置指定列的宽度(单位:字符个数),以第一列为例:ExcelApp.ActiveSheet.Columns[1].ColumnsWidth:=5;8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelApp.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米9)在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak:=1;10)在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak:=0;11)指定边框线宽度:ExcelApp.ActiveSheet.Range['B34'].Borders[2].Weight:=3; 1-左2-右3-顶4-底5-斜(\)6-斜(/)12)清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;13)设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1]:='隶书'; ExcelApp.ActiveSheet.Rows[1].Font.Color:=clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold:=True; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine:=True;14)进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader:='报表演示';b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter:='第&页';c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin:=2/0.035; d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin:=3/0.035; e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin:=2/0.035;f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin:=2/0.035; g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin:=2/0.035;h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin:=2/0.035;i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally:=2/0.035; j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically:=2/0.035;k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines:=True;15)拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelApp.ActiveSheet.Range['A1:E2'].Copy;c.从A1位置开始粘贴:ExcelApp.ActiveSheet.Range.['A1'].PasteSpecial;d.从文件尾部开始粘贴:ExcelApp.ActiveSheet.Range.PasteSpecial;16)插入一行或一列:a.ExcelApp.ActiveSheet.Rows[2].Insert;b.ExcelApp.ActiveSheet.Columns[1].Insert;17)删除一行或一列:a.ExcelApp.ActiveSheet.Rows[2].Delete;b.ExcelApp.ActiveSheet.Columns[1].Delete;18)打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;19)打印输出工作表:ExcelApp.ActiveSheet.PrintOut;20)工作表保存:if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveSheet.PrintPreview;21)工作表另存为:ExcelApp.SaveAs('C:\Excel\Demo1.xls');22)放弃存盘:ExcelApp.ActiveWorkBook.Saved:=True;23)关闭工作簿:ExcelApp.WorkBooks.Close;24)退出Excel:ExcelApp.Quit;二.使用Delphi控件方法在Form中分别放入ExcelApplication,ExcelWorkbook和ExcelWorksheet。
在Delphi编程中利用Excel实现动态报表
●南京帆软软件公司 ●商务咨询电话:86-025-5186 2240在Delphi 编程中利用Excel 实现动态报表0 引言随着计算机技术的不断普及, 办公的数字化程度越来越高, 出现了大量的计算机系统, 如固定资产管理系统、人事工资管理系统等等。
这其中存在大量的MIS 系统。
MIS 系统的一个重要特点是需要处理大量数据并形成报表。
由于行业或者其他一些原因, 这些报表的格式种类繁多, 而且还有一些复杂报表。
这些报表的格式在开发期间可能都无法设定。
为了解决这些问题, 本文采用了表格功能强大的Excel 作为报表模板, 用户可以按照自己的要求设置报表格式, 程序运行时再根据用户的设置动态填入数据, 从而实现动态报表功能。
1 实现原理先由用户按照自己的格式生成Excel 报表模板, 系统读取模板文件, 并把模板文件存入数据库, 保存用户输入的报表信息, 如某一字段填入第几行第几列。
报表打印时, 提取相应的Excel 文件, 利用Delphi 的Excel 控件填入数据库的数据, 实现动态报表功能。
2 实现过程2. 1 定义数据表系统使用MsSql Server2000数据库,定义两个表,一个是MB,用来存储报表基本信息和Excel 文件,一个是MB_Detail 存放报表的详细信息,如对应字段的行号和列号。
表结构如下:图1 MB 表结构 图2 MB _Detail 表结构MB 表中,“模板内容”字段为image 类型, 用来存储Excel 模板文件,“记录类型”字段用来表示是单张表格(只打印一条记录)还是列表(打印多条记录); MB Detail 表中的列号数据类型为char, 对应Excel 中的列号如A 、B 、C 等。
2. 2 保存和读取Excel 模板2. 2. 1 保存Excel 模板本系统将用户设置好的Excel 报表模板存入数据库“模板内容”字段。
由于本字段存储的是Excel 文件内容, 需要采用特殊的存储方式。
在Delphi编程中利用Excel实现动态报表
E c l : T xe p l a o . ra (e ) xe E cl pi t n C et sl ; A A ci e f
Ex eA. nn c ; c l Co e t
B舀 en
Fl a iN me: tm( .ilB N m (模板 名称 . stn ) / 保存 的模 板 的名称 e = r MB Fed y a e i ) A S ig ; / r
Sra : MB C etBo Sra MB Fe B N e 板 内容 ,b R a ) / 建立 数据 库流 tm = e . ra l t m( . i d y a (模 e b e l m ) m ed ; /
0 引 言
随着计 算机 技术 的不 断普及 , 办公 的数 字化程 度越 来越 高 , 出现 了大 量 的计 算 机 系统 , 固定 资产 如 管理 系统 、 事 工资管 理 系统 等 等 。这其 中存 在 大量 的 M S系 统 。MI 人 I S系统 的一个 重 要 特点 是 需要 处 理大 量数据 并形 成报表 H 。由于行 业或 者 其他 一 些 原 因 , ] 这些 报 表 的格 式 种类 繁 多 , 且 还 有 一些 复 而 杂报 表 。这些 报表 的格 式在 开发 期 间可能都 无法 设定 。为 了解决 这些 问题 , 文 采用 了表格 功能 强大 本 的 E cl 为报表 模板 , 户可 以按 照 自己的要求设 置 报表格 式 , xe作 用 程序 运 行 时再 根据 用 户 的设 置动 态填
MB Fe B N m ( 板名称 ’. stn = E t eFlN m ( dFl. et ; . il y a e 模 d A Sr g: xr ti a e e ti T x) i a e e
如何在DELPHI中操作EXCEL电子表格
如何在DELPHI中操作EXCEL电子表格如何在DELPHI中操作EXCEL电子表格EXCEL电子表格作为办公软件OFFICE中的重要组成部份,是日常办公系统的主要助手,因此许多日常所需的业务方面的数据通常是通过电子表格存取。
有时我们需要从日常工作中创建的EXCEL中取得数据进行操作、打印、查询,统计等工作。
在这里我将介绍如何利用delphi完成EXCEL电子表格中数据的操作。
一、新建一项目,从控件栏servers中分别选取控件:excelapplication、excelworkbook1、excelworksheet,放到主窗体from1中,并加入stringgrid、三个按钮、五个显示字段内容的EDIT、二个操作显示记录的label、一个用于打开EXCEL电子表格的控件opendialog等,如下图所示:二、选择excel表'按钮,用于打开EXCEL文件,其代码如下:procedure TForm1.Button1Click(Sender: TObject);var i,j:integer;beginopendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径opendialog1.Execute;TryExcelApplication1.Connect;//EXCEL应用程序ExceptMessageDlg('Excel may not be installed',mtError, [mbOk], 0);Abort;End;ExcelApplication1.Visible[0]:=True;ExcelApplication1.Caption:='Excel Application';tryexcelapplication1.Workbooks.Open(opendialog1.FileName,null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件exceptbeginExcelApplication1.Disconnect;//出现异常情况时关闭ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');exit;end;end;ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接//开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCELfor i:=1 to 1000 do//最大取值1000for j:=1 to 6 dobeginif trim(excelworksheet1.cells.item[i+1,1])<>'' thenbeginstringgrid1.rowCount:=i+1;stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j];endelsebeginlabel3.caption:=inttostr(i-1);ExcelApplication1.Disconnect;ExcelApplication1.Quit;//将第一条数据赋给编辑框edit2.text:=stringgrid1.Cells[1,1];edit1.text:=stringgrid1.Cells[2,1];edit3.text:=stringgrid1.Cells[3,1];edit4.text:=stringgrid1.Cells[4,1];edit5.text:=stringgrid1.Cells[5,1];exit;end;end;end;三、'下一条记录'按钮,完成记录向下移动,代码如下: procedure TForm1.Button2Click(Sender: TObject); var x:integer;beginx:=stringgrid1.row+1;if x<> stringgrid1.RowCount thenbeginstringgrid1.row:=stringgrid1.row+1;label1.caption:=inttostr(x);edit2.text:=stringgrid1.Cells[1,x];edit1.text:=stringgrid1.Cells[2,x];edit3.text:=stringgrid1.Cells[3,x];edit4.text:=stringgrid1.Cells[4,x];edit5.text:=stringgrid1.Cells[5,x];exit;endelseshowmessage('已到第一条记录!');end;四、'上一条记录',完成记录上移,代码如下:var x:integer;beginx:=stringgrid1.row-1;if x<>0 thenbeginstringgrid1.row:=stringgrid1.row-1;label1.caption:=inttostr(x);edit2.text:=stringgrid1.Cells[1,x];edit1.text:=stringgrid1.Cells[2,x];edit3.text:=stringgrid1.Cells[3,x];edit4.text:=stringgrid1.Cells[4,x];edit5.text:=stringgrid1.Cells[5,x];exit;endelseshowmessage('已到最后一条记录!');end;五、stringgrid中上下移动时代码:procedure TForm1.StringGrid1Click(Sender: TObject);var i:integer;begini:=stringgrid1.Row;label1.caption:=inttostr(i);edit1.text:=stringgrid1.Cells[2,i];edit2.text:=stringgrid1.Cells[1,i];edit3.text:=stringgrid1.Cells[3,i];edit4.text:=stringgrid1.Cells[4,i];edit5.text:=stringgrid1.Cells[5,i];end;六、运行程序,点击按钮1打开excel表格。
使用delphi控制office生成成绩报告书
在实际的工作中,常用的数据库系统可以很方便的实现信息的管理0而另一方面,Office 软件凭着其强大的功能在日常工作中占据着重要的地位0如果能把两种软件联合起来应用,那么在很多时候能极大的提高工作的效率0下面我以日常工作中遇到的一个问题和解决过程来讨论如何用DeIphi 编写程序结合Office 中的wold,exceI,access 来提高工作效率0这是一个班主任写成绩报告书的流程:从教务管理系统中获取班级成绩(一个exceI 文件>->填写每个学生的成绩报告书(包括此学生每一科的成绩,评语>->打印->邮寄0从上面的流程看第二步工作是最繁琐的,既然教务管理系统已经生成了一个exceI 格式的成绩文件,我们就可以考虑编写一个程序读取此exceI 文件,然后班主任只需要填写每个学生的评语就可以自动生成包含每个学生的成绩的报告书的wold 文档(一个学生占一页>0现在假设程序已经编写好,那么整个系统的流程因该是这样的:用户选择成绩文件(exceI->程序读入数据到数据库->显示成绩->用户输入评语->程序保存用户输入->用户选择生成wold 文档->程序生成wold 文档0除去用户做的那一部分,程序要完成的工作显然就是:程序读入数据到数据库->显示成绩->程序保存用户输入->程序生成wold 文档0下面就根据程序的流程来描述整个程序的设计过程0L 读入数据到数据库要读取的exceI 文件的格式如下:很明显,以上的学生成绩信息是以交叉表的形式来显示的0具体的过程和关键的程序代码如下:(l)首先创建ExceI 对象,关联要读取的包含成绩信息的exceI 文件0XLapp:=cleateOIeObject('ExceI.appIication');XLapp.dispIayaIelts:=faIse;XLapp.scleenupdating:=faIse;XLapp.WolkBooks.add(EXLfiIe);wolkbook :=XLapp.wolkbooks[l];sheet:=wolkbook.wolksheets[l];//创建exceI 对象,并且与要读取的exceI 文件相关联0(2)获取exceI 数据表有成绩数据的行数0XLapp.activeceII.speciaIceIIs(xILastceII).seIect;maxrow:=XLapp.activeceII.row;//最大行数maxrow ,也就是有成绩数据的行的//数量(3)开始从exceI 文件里读取数据到数据库从第五行开始到最后一行(因为标题占四行,如上面的表格所示>,把exceI 数据读入access 数据库0因为在exceI 显示的是交叉表,但是数据读入数据库后不可能以交叉表的形式存放0所以在读取时候,并不是一行数据作为一条记录存放入数据库0而是学生的一科成绩作为一条记录放入数据库0folml.pbal.visibIe:=tlue;folml.pbal.min:=O;folml.pbal.max:=maxrow-4;//显示并初始化进度条fol irow:=5to maxrow do //从exceI 的第五行开始循环读取数据begintbI.append ;fol i:=O to 2dotbI.fieIds[i].asstling:=sheet.ceIIs[irow,i+l];tbI.post;//把学生的学号,班级,姓名写入学生的基本信息表0i:=5;temp:=sheet.ceIIs[5,i];whiIe i<=maxcoI do beginif temp<>''then //如果此科目当前的学生有成绩,则把成绩写入成绩表begintbIl.append;tbIl.fieIds[O].asstling:=sheet.ceIIs[irow,3];tbIl.fieIds[l].asstling:=sheet.ceIIs[2,i-l];tbIl.fieIds[2].asstling:=sheet.ceIIs[irow,i];tbIl.post;end;i:=i+2;temp:=sheet.ceIIs[irow,i];收稿日期 2007-03-23作者简介 杨国华 1978- 1男1广东肇庆人1助理实验师1研究方向 数据库1计算机硬件0使用Delphi 控制Office 生成成绩报告书杨国华广东机电职业技术学院计算机系1广东广州510515摘要!在实际的工作中1常用的数据库系统可以很方便的实现信息的管理0而另一方面1Office 软件凭着其强大的功能在日常工作中占据着重要的地位0如果能把两种软件联合起来应用1那么在很多时候能极大的提高工作的效率0而如何控制Office 里面的Word ,ex !cel,access 是联合应用的关键0而Delphi k 可以很方便的实现这个功能0关键词!Delphi H Word H excel H access H vba H ado H 交叉表H 宏中图分类号!TP31L 文献标识码!A 文章编号!1009-3044(2007)08-20312-03Control Office to Making the Grade Report by DelphiYANG Guo-hua(GuangDong Vocational College of Mechanical &Electrical Technology ,Guangdong 510515,China)Abstract:The Database System can manage any message very convenient in the Work.For another side Office is used in the regular Work popularly by it s poWerful function.If can unit the Database System and Office together,We can raise greatly the efficiency in Work.The Key is that Controlling the Word ,the excel the access of office .Delphi can do the job good.Key words:Delphi;Word;excel;access;vba;ado;crossing table;macro312end;folml.Pbal.Position:=folml.Pbal.Position+l;//进度条进度加一..需要补充说明的是Deiphi跟access数据库的连接是采用ado 技术0为了方便程序的移植我是采用相对路径来指向数据库的位置0实现此功能的代码如下.:.dill:=ExtlactfiieDil(Appiication.Exename);//获取当前程序的路径dill:=dill+'\data.mdb';//获取数据库的路径adoconnectionl.Connectionstling:='Plovidel=Miclosoft.jet. OLEDB.4.0;Usel ID=Admin;Data soulce='+dill+';Mode=shale Deny none;Extended Plopelties="";Pelsist seculity Info=faise;jet OLEDB:system database="";jet OLEDB:Registly Path=""';.2显示成绩此步完成的工作就是把成绩数据从access表格里面读出来并且把每一个学生的成绩以交叉表的形式(就像前面excei的形式)显示在程序的界面里面0具体的完成过程我是使用了Deiphi里面的Adoouely控件完成的方法就是在向Adoouely控件的soL属性加入交叉表的生成代码然后执行查询0所以生成交叉表代码是完成这一步工作的关键0交叉表的代码如下:tRAnsfORM Max(v_glade.成绩)As成绩之最大值sELECt v_glade.班级,v_glade.姓名,v_glade.学号fROM v_gladeGROUP BY v_glade.班级,v_glade.姓名,v_glade.学号oldel by v_glade.学号PIVOt v_glade.科目;其实以上就是access编程所要用到的典型的VBA代码0实际上我对VBA代码的格式也不熟悉我是采用取巧的方法来得到这一段代码的0方法就是利用access本身具有的向导生成交叉表的功能在access数据库里面建立一个我要的成绩交叉表然后把里面的VBA代码复制下来放入Deiphi里面即可0 3保存用户输入这里主要是指保存用户输入对每一个学生的评语评语保存在学生的基本信息表里面0方法比较简单直接找到当前学生的学号从而定位学生记录把评语写入此记录的相应字段里面0具体实现如下:gl_judgment.Edit;gl_judgment.fieids[3].Asstling:=dbmemol.text;//把当前填写的评语写入数据库0gl_judgment.Post;其中gl_judgment是Deiphi里面的Adoouely控件它连接学生的基本信息表04生成word文档这一步是整个程序的关键就是控制wold来生成成绩报告书0我是使用Deiphi里面的WoldAppiication和WoldDocument来控制wold文档的生成0当然在此外之前程序的用户已经使用程序把评语写入数据库(学生的基本信息表)0之后的工作就是把学生的基本信息(包括学号姓名班级等) 加上评语各科的成绩生成一个wold文档0这个wold文档包含每个学生的报告书信息(就是以上所提到的) 一个学生一份(本程序体现为一页)0此步的整个过程以及实现的部分关键代码如下:4.l这个过程用到的变量.val tempiate,newtempiate,Documenttype,Visibie,Defauttabie! Behaviol,AutofitBehaviol:OieValiantUnitM,Count,Extendl,numRows:OieValiant;itemIndex:OieValiant;p:oievaliant;//oie变量表示分页s_no:stling;//表示学号的临时变量.4.2连接Wold2000连接Wold2000如果系统有安装Wold2000则使用Deiphi 里面的WoldAppiication控件与之连接跟着WoldDocument新建一个文档;用如果没有安装程序报告用户并且停止Wold文档的生成动作0.tly//连接到Wold2000WoldApp.Connect();exceptBeep;MessageDig('不能生成文档请确认是否安装了Wold2000J ',mtEllol,[mbOK],0);Abolt;end;//显示Wold2000scleen.Culsol:=clHoulGiass;//给调用Add函数使用的实参赋值tempiate:=EmptyPalam;newtempiate:=faise;Documenttype:=wdnewBiankDocument;//调用Add函数WoldApp.Documents.Add(tempiate,newtempiate,Document! type,Visibie);//连接到新建的文档itemIndex:=l;WoldDoc.Connectto(WoldApp.Documents.Item(itemIndex));//开始向Wold文档中写入内容..4.3生成成绩单获取数据库里面的学生基本信息表和成绩表并且把读出来的数据按照既定的格式写入到wold文档生成成绩报告书0报告书的格式如下:部分代码如下:tb_plintglade.Open;pball.Min:=0;pball.Max:=tb_plintglade.RecoldCount;pball.Visibie:=tlue;pball.Position:=0;//初始化进度条0设置其长度为要生成报告书的学生的个数WoldApp.Visibie:=tlue;//显示wold文档with WoldApp.seiection dobeginwhiie(not tb_plintglade.Eof)dobeginif tb_plintglade.fieidByname('学号').Asstling<>s_no thenbegin!"!(上接第303页)数据的唯一性9即一列中不能出现重复值0比如9职工信息表中的C职工编号$\C身份证号码$等O可以通过设置数据的有效性9在输入数据的时候自动检查输入的数据与同列中其它数据是否有重复0如有重复9则会出现提示9以确保一列中不出现重复的数据0这类似于数据库中的表的主键0举例从E列的E2单元格开始输入职工的编号9要求此列的数据不能重复9即没有任何两个职工的编号相同0设置的步骤如下图1O第一步选中E2及以后的要输入编号数据的单元格9执行C数据$!C有效性 $9打开如l0所示的对话框9第二步在该对话框中9C允许$下面选择C自定义$9在C公式$下方输入=COUnTIF(B:B,B2)=l9单击C确定$按钮9这样设置后9在E列某单元格输入数据时9如果跟E列已有数据相同9则会出现错误提示9从而限制这列中的数据不重复02.8在Excei工作表中利用文本文件中的数据假如有一些以纯文本格式储存的文件9如果此时正需要将这些数据制作成Excei的工作表0如果重新输入一遍9太浪费时间9就算是将数据一个个复制到工作表中9同样也很费事0这时可用如下方法操作在Excei工作表的编辑区中9选定菜单栏中的C数据$ !C导入外部数据$!C导入数据 $命令9出现如图表ll所示的对话框9在此对话框中C文件类型$后面选择C文本文件$项9通过C查找范围$后面的下拉箭头打开要导入的文本文件所在的文件夹9选择要导入的文本文件9单击C打开$按钮9然后根据向导的提示一步步完成操作9就可以把文本格式的数据转到工作表中了02.9快速进行中英文输入法切换在工作表中输入数据时9通常既包含有数字数据9又包含有文字数据9需要不断地反复切换输入法9这也是件麻烦事0通过设置自动切换中英文输入法9就可以避免频繁切换输入法的麻烦0设置的方法如下首先用鼠标选中需要输入中文的单元格区域通常是整列 9然后选择一个合适的中文输入法9再执行C数据$ !C有效性 $命令9打开"数据有效性"对话框9选中"输入法模式"选项卡9在输入法"模式"框中选择C打开$9单击"确定"按钮0如图l2所示0图11图12!小结在Excei中输入数据的技巧很多9上面只是略举几例常用的输入数据的方法及技巧0在输入数据的过程中9可以借鉴别人提供的技巧9灵活运用9做到举一反三9触类旁通9也要注意积累9只有这样9才能做到在输入数据时得心应手9从而提高工作效率0参考文献![l]舒易资讯.Office2003使用详解与技巧[M]!机械工业出版社.[2]中国ITF培训工程编委会.Excei2002入门与进阶[M]!珠海出版社.[3] 00招玩转Excei数据处理与函数应用[M]!电子工业出版社.[4]王柯9暨百南9曾瑶辉等.计算机应用基础[M]!湖南教育出版社.if S_no<>''thenbeginWoldapp.DocumentS.Item(numRowS).TabieS._Item(Woldapp.DocumentS.Item(numRowS).TabieS.Count).se" iect;Woldapp.seiection.InSeltRowSBeiow(numRowS);gl_judgment.CioSe;gl_judgment.palametelS[0].Vaiue:=S_no;gl_judgment.Open;Woldapp.seiection.CeiiS.Melge;TypeText('班主任评语'+gl_judgment.FieidS[3].aSStling);UnitM:=wdLine;Count:=l;Extendl:=wdMove;Woldapp.seiection.MoveDown(UnitM,Count,Extendl);Typepalaglaph;InSeltBleak(p);//如果是下一个学生就换页end;Scleen.CulSol:=clDefauit;可以看到9以上有很多控制wold文档的代码9这些都是从VBa代码转换过来的0VBa代码的使用9可以参照Office2000自带的帮助文件C VBaOFF9.CHM$9也可以打开wold9然后用录制宏的方式9把你想要的操作9例如换页9换行9建立表格等等录制下来0之后用编辑宏的方式打开刚录制的宏9你就可以看到你所要的VBa代码了0当然9把这些代码放入Deiphi还要做一些适当的修改9这也是我做这个程序里面得到的一些经验0"结语到此为止9整个程序的所有关键部分都介绍完了0通过这个程序的设计9我们可以看到9多种工具联合起来9并且灵活的将其相结合9往往可以收到意想不到的效果0当然Deiphi和Office的强大的功能远远不止这些9只要善于思考和发现9很多时候它们能很好的提高我们的工作效率0参考文献![l]Boliand softwale Colpolation.Deiphi开发人员指南[M].波兰Boliand pubiiShel,2003;l0l-l09.[2]陈省著.Deiphi深度探索9[M],武汉华中科技大学出版社, 2004;l30-l43.[3](美)RaY LIsCHnER.DELpHI技术手册[M],北京中国电力出版社,200l;50-70.!"#使用Delphi控制Office生成成绩报告书作者:杨国华, YANG Guo-hua作者单位:广东机电职业技术学院,计算机系,广东,广州,510515刊名:电脑知识与技术(学术交流)英文刊名:COMPUTER KNOWLEDGE AND TECHNOLOGY年,卷(期):2007,2(8)1.Borland Software Corporation Delphi 6开发人员指南 20032.陈省Delphi深度探索 20043.RAY LISCHNER DELPHI技术手册 20011.彭金祥.张剑Delphi应用程序与Microsoft Office的集成[期刊论文]-电脑编程技巧与维护2001(12)2.曹芝兰.王汉江.Cao Zhilan.Wang Hanjiang基于Delphi+Excel 2000制作复杂报表[期刊论文]-湖北大学学报(自然科学版)2000,22(4)3.谢俊.XIE Jun题库管理系统中OLE技术对WORD的控制实现[期刊论文]-电脑知识与技术2009,5(36)4.翁发禄.梁礼明.丁元春.Weng Falu.Liang LiMing.Ding Yuanchun Delphi在实现数据转换中的应用研究[期刊论文]-中国水运(学术版)2007,7(4)5.周赛.刘步星Excel表格到Paradox数据库的转换[期刊论文]-中国电力教育2007(z2)6.陈美娟.丁广龙.CHEN Mei-juan.DING Guang-long一种实用型帮助文件的创建方法[期刊论文]-计算机与现代化2005(10)7.李欣基于Delphi的Word访问控制及其简单举例[期刊论文]-电脑知识与技术2008,2(14)8.胡小红.游新娥.Hu Xiaohong.You Xine基于DELPHI的WORD文档处理技术研究[期刊论文]-电脑学习2007(3)9.于春玲.YU Chunling Delphi的Excel访问技术[期刊论文]-电脑编程技巧与维护2009(12)10.冯帆.王嘉祯.徐波.刘晓琴.文家福.FENG FAN.WANG JIAZHEN.XU BO.LIU XIAOQIN.WEN JIAFU基于OLE技术实现Delphi与Excel通讯方法[期刊论文]-微计算机信息2007,23(30)引用本文格式:杨国华.YANG Guo-hua使用Delphi控制Office生成成绩报告书[期刊论文]-电脑知识与技术(学术交流) 2007(8)。
Delphi操作EXCEL 函数整理
一、使用单元:Use :EXCEL 2000, ComObj二、定义var ExcelApp,Sheet,Range: V ariant;注释:ExcelApp 为定义的Excel 对象Sheet 为定义的工作表(Sheet)对象Range 为定义的工作表范围三、关于Excel 对象创建初始化以及工作表、工作表范围的初始化1. 创建excel对象:ExcelApp := CreateOleObject( 'Excel.Application' );2. 显示当前窗口:ExcelApp.V isible := True;3. 更改Excel 标题栏:ExcelApp.Caption := '应用程序调用Microsoft Excel';4. 添加新工作簿:ExcelApp.WorkBooks.Add;5 打开已存在的工作簿:ExcelApp.WorkBooks.Open(FilePath);6.设置工作簿默认工作表张数ExcelApp.SheetsInNewWorkbook := 1;7.设置工作表名称ExcelApp.Workbooks[WorkbookNum].WorkSheets[WorkSheetNum].Name := PName;8.工作表初始化Sheet:= ExcelApp.Workbooks[WorkbookNum].WorkSheets[WorkSheetNum];9.工作表范围初始化Range := Sheet.Range['A1:DL1'] ;10.设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;或ExcelApp.WorksSheets[ 'Sheet2' ].Activate;三、单元格赋值设置数值类型1. 给单元格赋值:ExcelApp.Cells[row, column].V alue := '第一行第四列';或Sheet.Cells[row, column] := ‘第一行第四列’;2 清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[row,column].ClearContents;或Sheet.Cells[row,column]. ClearContents3设置单元格数值类型为文字型Range.NumberFormatLocal := '@';四、设置列宽和行高1. 设置指定列的宽度(单位:字符个数):ExcelApp.ActiveSheet.Columns[column].ColumnsWidth := 5;或Sheet.Columns[column].ColumnWidth := 5;2.设置指定行的高度(单位:磅)(1磅=0.035厘米)ExcelApp.ActiveSheet.Rows[row].RowHeight := 1/0.035; // 1厘米或Sheet. Rows [row]. RowHeight:= 1/0.035;五、对齐方式1.水平对齐Range.HorizontalAlignment:=xlCenter; 居中Range.HorizontalAlignment:=xlLeft;居左Range.HorizontalAlignment:=xlRight;居右或Sheet.Cells[row,column].HorizontalAlignment:=xlCenter; 居中Sheet.Cells[row,column].HorizontalAlignment:=xlLeft;居左Sheet.Cells[row,column].HorizontalAlignment:=xlRight;居右2.垂直对齐Range. V erticalAlignment:=xlCenter; 居中Range. V erticalAlignment:= xltop;顶端对齐Range. V erticalAlignment:= xlbottomfont;底部对齐或Sheet.Cells[row,column]. VerticalAlignment:=xlCenter; 居中Sheet.Cells[row,column]. VerticalAlignment:= xltop;顶端对齐Sheet.Cells[row,column]. VerticalAlignment:= xlbottomfont; 底部对齐六、文字控制1.自动换行Range.WrapText:=true;或Sheet.Cells[row,column]. WrapText:=true;2.合并单元格Sheet.range['A17:G17'].Merge;3.跨越合并Sheet.range['C27:D34'].Merge(true);七、字型设置1.设置字体大小Range.Characters.Font.Size := 10;或Sheet.Cells[row,column].Characters.Font.Size := 10;2.字体加重Range.Characters.Font. Bold:= true;或Sheet.Cells[row,column].Characters.Font. Bold:= true;3.字体倾斜Range.Characters.Font. Italic:= true;或Sheet.Cells[row,column].Characters.Font. Italic:= true;4.字体:=’楷体_GB2312'或Sheet.Cells[row,column].Characters.Font. Name:=’楷体_GB2312’5字体样式(常规,斜体,粗体,粗斜体)Range.Characters.Font.FontStyle:=’常规'或Sheet.Cells[row,column].Characters.Font.FontS tyle:=’常规'6.下划线Range.Characters.Font.UnderLine := True;或Sheet.Cells[row,column].Characters.Font.UnderLine := True;八、分页符操作1.在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows.PageBreak := 1;或Sheet. Rows. PageBreak := 1;或Range. Rows. PageBreak := 1;2.在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;或Sheet.Columns[4]. PageBreak := 0;或Range.Columns[4].PageBreak :=0;九、关于边框的操作:Border :1-左2-右3-顶4-底5-斜( \ ) 6-斜( / )1.指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[Border].Weight := 3;或Sheet. Borders[Border].Weight := 3;或Range Borders[Border].Weight := 3;2.边框线线条形状Sheet.Borders[Border].linestyle :=1;或Range.Borders[Border]. Linestyle := 1;Linestyle 1:实线2 虚线12 双横线十、关于颜色1. 设置单元格背景色Sheet.Cells[row,column].Interior.ColorIndex := 38;或Range.Interior.ColorIndex := 38;2.字体颜色Range.Characters.Font.Colorindex:=6;或Sheet.Cells[row,column].Characters.Font.Colorindex:=6 Colorindex的值十一、冻结窗口Sheet.Cells[2,3].select;ExcelApp.ActiveWindow.FreezePanes := True;十二、打印设置1.页眉:Sheet.PageSetup.CenterHeader := '报表演示';2.页脚:Sheet.PageSetup.CenterFooter := '第&P页';3页眉到顶端边距2cm:Sheet.PageSetup.HeaderMargin := 2/0.035;4.页脚到底端边距3cm:Sheet.PageSetup.HeaderMargin := 3/0.035;5.顶边距2cm:Sheet.PageSetup.TopMargin := 2/0.035;6.底边距2cm:Sheet.PageSetup.BottomMargin := 2/0.035;7.左边距2cm:Sheet.PageSetup.LeftMargin := 2/0.035;8.右边距2cm:Sheet.PageSetup.RightMargin := 2/0.035;9.页面水平居中:Sheet.PageSetup.CenterHorizontally := 2/0.035;10.页面垂直居中:Sheet.PageSetup.CenterV ertically := 2/0.035;11.打印单元格网线:Sheet.PageSetup.PrintGridLines := True;12缩放比例Sheet.PageSetup.zoom := 75;13横向打印Sheet.PageSetup.Orientation:= xllandscape;14 纵向打印Sheet.PageSetup.Orientation:=xlportrait;15.设置打印标题行Sheet.PageSetup.PrintTitleRows := Sheet.Rows['1:3'].Address ;Sheet.PageSetup.PrintTitleColumns := Sheet.Rows[3].Address;16.打印预览工作表:Sheet.PrintPreview;17 打印输出工作表:Sheet.PrintOut;十三、拷贝操作:1.拷贝整个工作表:ed.Range.Copy;2. b.拷贝指定区域:Sheet.Range[ 'A1:E2' ].Copy;3.从A1位置开始粘贴:Sheet.Range.[ 'A1' ].PasteSpecial;4.从文件尾部开始粘贴:Sheet.Range.PasteSpecial;十四、行列的插入删除1. 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;b. ExcelApp.ActiveSheet.Columns[1].Insert;2. 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;b. ExcelApp.ActiveSheet.Columns[1].Delete;十五、Excel保存关闭1.工作表保存:if not ExcelApp.ActiveWorkBook.Saved thenExcelApp.ActiveSheet.PrintPreview;2.工作表另存为:ExcelApp. SaveAs ( filepath);3 放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;4. 关闭工作簿:ExcelApp.WorkBooks.Close;5. 退出Excel:ExcelApp.Quit;6. 工作表关闭ExcelApp.WorkBooks.Close ;十六、其他1. 已经使用的行数edRange.Rows.Count;(三)使用Delphi控制Excel二维图在Form中分别放入ExcelApplication,ExcelWorkbook和ExcelWorksheet V ar asheet1,achart,range:variant;1)选择当第一个工作簿第一个工作表asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];2)增加一个二维图achart:=asheet1.chartobjects.add(100,100,200,200);3)选择二维图的形态achart.chart.chartype:=4;4)给二维图赋值series:=achart.chart.seriescollection;range:=sheet1!r2c3:r3c9;series.add(range,true);5)加上二维图的标题achart.Chart.HasTitle:=True;achart.Chart.ChartTitle.Characters.Text:=’Excel二维图’6)改变二维图的标题字体大小achart.Chart.ChartTitle.Font.size:=6;7)给二维图加下标说明achart.Chart.Axes(xlCategory,xlPrimary).HasTitle:=True;achart.Chart.Axes(xlCategory,xlPrimary).AxisTitle.Characters.Text:=’下标说明’;8)给二维图加左标说明achart.Chart.Axes(xlValue,xlPrimary).HasTitle:=True;achart.Chart.Axes(xlValue,xlPrimary).AxisTitle.Characters.Text:=’左标说明’;9)给二维图加右标说明achart.Chart.Axes(xlValue,xlSecondary).HasTitle:=True;achart.Chart.Axes(xlValue,xlSecondary).AxisTitle.Characters.Text:=’右标说明’;10)改变二维图的显示区大小achart.Chart.PlotArea.Left:=5;achart.Chart.PlotArea.Width:=223;achart.Chart.PlotArea.Height:=108;11)给二维图坐标轴加上说明achart.chart.seriescollection[1].NAME:=’坐标轴说明’;。
Excel 2000:用Delphi自动生成报表
Excel 2000:用Delphi自动生成报表摘要:Excel是当前最流行的数据报表制作工具。
本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题。
关键字:Delphi,Excel,报表引言数据报表作为企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用。
因此,数据报表已经成为管理信息系统中重要的一项功能,并且,由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂。
Delphi是一个高效的可视化数据库管理信息系统开发工具,.但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版本提供的Quick Report控件组,还是Delphi 7提供的Rave控件组,都不能让用户对生成的报表进行改动,且程序控制很难实现。
Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各行业办公人员的青睐。
本文根据实际应用实践,介绍利用Delphi编程控制Excel生成报表的各种方法。
Delphi控制Excel的方法1 创建Excel文件要在Delphi中控制Excel,就必须用到OLE自动化。
现在一般采用OLE2来创建OLE对象,当激活一个OLE对象时,服务器程序仅在容器程序内部激活,这就是所谓的“就地激活”(in-place activation)。
创建Excel文件时,先创建一个OLE对象,然后在对象中建立工作表worksheet,如函数createExcel所示:function createExcel:variant;varv:variant;sheet:variant;beginv:=createoleobject('Excel.Application');//创建OLE对象v.visible:=true;v.workbooks.add(-4167); //添加工作表v.workbooks[1].sheets[1].name:='test';sheet:=v.workbooks[1].sheets['test'];return v;end;2 数据表格控制Excel表格的控制,主要包括数据的导入、修改;单元格的合并、边框的控制;表格的复制、粘贴等。
在Delphi编程中利用Excel实现动态报表
在Delphi编程中利用Excel实现动态报表0 引言随着计算机技术的不断普及, 办公的数字化程度越来越高, 出现了大量的计算机系统, 如固定资产管理系统、人事工资管理系统等等。
这其中存在大量的MIS系统。
MIS系统的一个重要特点是需要处理大量数据并形成报表。
由于行业或者其他一些原因, 这些报表的格式种类繁多, 而且还有一些复杂报表。
这些报表的格式在开发期间可能都无法设定。
为了解决这些问题, 本文采用了表格功能强大的Excel作为报表模板, 用户可以按照自己的要求设置报表格式, 程序运行时再根据用户的设置动态填入数据, 从而实现动态报表功能。
1 实现原理先由用户按照自己的格式生成Excel报表模板, 系统读取模板文件, 并把模板文件存入数据库, 保存用户输入的报表信息, 如某一字段填入第几行第几列。
报表打印时, 提取相应的Excel文件, 利用Delphi的Excel控件填入数据库的数据, 实现动态报表功能。
2 实现过程2. 1 定义数据表系统使用MsSql Server2000数据库,定义两个表,一个是MB,用来存储报表基本信息和Excel文件,一个是MB_Detail存放报表的详细信息,如对应字段的行号和列号。
表结构如下:图1 MB 表结构图2 MB _Detail表结构MB表中,“模板内容”字段为image类型, 用来存储Excel模板文件,“记录类型”字段用来表示是单张表格(只打印一条记录)还是列表(打印多条记录); MB Detail表中的列号数据类型为char, 对应Excel中的列号如A、B、C等。
2. 2 保存和读取Excel模板2. 2. 1 保存Excel模板本系统将用户设置好的Excel报表模板存入数据库“模板内容”字段。
由于本字段存储的是Excel文件内容, 需要采用特殊的存储方式。
本系统使用Delph i的TO leContainer控件, 与Excel文件建立连接, 最后存入数据库。
基于Delphi+Excel 2000制作复杂报表
基于Delphi+Excel 2000制作复杂报表
曹芝兰;王汉江
【期刊名称】《湖北大学学报(自然科学版)》
【年(卷),期】2000(022)004
【摘要】利用Dephi来操作Excel应用程序中的workbooks,worksheets和cells等对象,来研究制作复杂报表的方法,取得了较好的效果,该方法方便灵活,增强了Ex cel处理表格的能力.
【总页数】4页(P329-331,335)
【作者】曹芝兰;王汉江
【作者单位】湖北大学数学与计算机科学学院,湖北,武汉,430062;湖北大学数学与计算机科学学院,湖北,武汉,430062
【正文语种】中文
【中图分类】TP311.51
【相关文献】
1.利用OLE技术和Excel制作复杂报表 [J], 李淑红;张巧荣
2.妙用“报表变量”制作复杂报表 [J], 郝山德;郝有德
3.在管理信息系统中复杂报表的制作 [J], 张聪利
4.一种基于VC的复杂报表实用制作方法 [J], 陈庆
5.一种基于VC的复杂报表实用制作方法 [J], 陈庆
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel 2000:用Delphi自动生成报表
摘要:Excel是当前最流行的数据报表制作工具。
本文介绍如何使用Delphi来控制Excel完成数据库与报表之间的数据交换,讨论了报表制作工程中的一些细节性问题。
关键字:Delphi,Excel,报表
引言
数据报表作为企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用。
因此,数据报表已经成为管理信息系统中重要的一项功能,并且,由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂。
Delphi是一个高效的可视化数据库管理信息系统开发工具,.但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版本提供的Quick Report控件组,还是Delphi 7提供的Rave控件组,都不能让用户对生成的报表进行改动,且程序控制很难实现。
Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各行业办公人员的青睐。
本文根据实际应用实践,介绍利用Delphi编程控制Excel生成报表的各种方法。
Delphi控制Excel的方法
1 创建Excel文件
要在Delphi中控制Excel,就必须用到OLE自动化。
现在一般采用OLE2来创建OLE对象,当激活一个OLE对象时,服务器程序仅在容器程序内部激活,这就是所谓的“就地激活”(in-place activation)。
创建Excel文件时,先创建一个OLE对象,然后在对象中建立工作表worksheet,如函数createExcel所示:function createExcel:variant;
var
v:variant;
sheet:variant;
begin
v:=createoleobject('Excel.Application');//创建OLE对象
v.visible:=true;
v.workbooks.add(-4167); //添加工作表
v.workbooks[1].sheets[1].name:='test';
sheet:=v.workbooks[1].sheets['test'];
return v;
end;
2 数据表格控制
Excel表格的控制,主要包括数据的导入、修改;单元格的合并、边框的控制;表格的复制、粘贴等。
当报表格式一定的情况下,表格的复制、粘贴显得尤为重要,这样,可以先制作一个文件模板,然后按照实际需要输出多页报表即可。
(1)数据的导入(importData)
procedure importData;
var
I,j:integer;
v:variant;
begin
v:=createExcel; //创建Excel文件test
for I:=0 to maxcolumn do
begin
for j:=0 to maxrow do
v.workbooks[1].sheets[1].cells[I,j]:=I*j; //导入数据
end;
end;
(2)单元格的合并、边框的控制(lineStylecontrol)
单元格的合并,是在选定合并范围的情况下进行的。
边框控制可以操作边框线条的是否显示。
其他方式的控制,可以仿照下面过程进行。
procedure lineStylecontrol;
var
v,sheet,range:variant;
begin
v:=createExecl;
sheet:= v.workbooks[1].sheets[1];
range:=sheet.range[sheet.cells[1,1],sheet.cells[39,30]];//选定表格
range.select;
range.merge; //合并单元格
range.borders.linestyle:=xlcontinuous; //置边框线可见
range.font.size:=9; //改变表格内文本字体大小
end;
(3)表格的复制与粘贴(copyandPaste)
procedure copyandPaste;
var
v,sheet,range:variant;
begin
v:=createExecl;
sheet:= v.workbooks[1].sheets[1];
range:=sheet.range[sheet.cells[1,1],sheet.cells[39,30]];
range.select; //选定要复制的表格
range.copy; //复制选定的表格
sheet.range[sheet.cells[40,1],sheet.cells[40,1]].select; //选择要粘贴的位置sheet.paste;//粘贴表格
end;
3 文件的保存
文件保存是在创建文件的基础上进行的,过程saveFile说明了文件保存过程中应该注意的问题:
procedure saveFile;
var
sheet,v:variant;
begin
v:=createExcel;
if savedialog.execute then
begin
v.workbooks[1].saveas(savedialog.FileName);//保存文件
v.workbooks[1].close; //关闭工作表
v.quit; //关闭Excel
v := unassigned;
end;
end;
报表制作应注意的问题
(1)报表格式的选择
报表格式的选择对信息系统报表的实现方法起着决定性的影响。
如果在报表的格式要求比较严格的情况下,应当采用模板的方式产生报表。
由于模板在数据导入之前就已经按照标准制定好,所以只要在程序中控制模板的复制与粘贴,然后编程实现数据输入指定位置即可。
而对于报表格式多变的情况,由于数据的不同,需要合并单元格或者控制边框,可以直接在程序中自动控制报表的生成。
(2)打印
对于Excel报表的打印,最好不要在程序中进行控制,因为报表往往需要签字或者进行审查,有许多报表都包含平面图或示意图,为了有效的控制打印质量,最好通过程序控制输出或显示Excel文件,以便修改;另一个重要的原因是Excel具有强大的排版功能,而这正是选择Excel导出报表的重要原因。
(3)报表时间和表头
报表时间要有用户可以控制的输出。
表头的制作要在事先做好格式,控制输出时,只改动那些诸如上报单位、下达单位、负责人等数据,这样既保证了系统的效率,又不失其实用性。
结论
用Delphi控制Excel来完成数据库管理信息系统的数据报表功能,是Delphi制作复杂报表的最佳选择,因为Delphi 不但能控制数据的导出与导入,而且可以完成当前Excel应用中的大部分功能。
如果深入研究Visual Basic for Application(VBA)就可以制作出符合实际需要的各种Delphi控制Excel的控件。
参考文献:
[1] Steve Teixeira,XavIEr Pacheco.Delphi 6开发人员指南. 北京:机械工业出版社,2003.
[2] 刘忠恺,刘春.Delphi 5.0数据库开发应用教程. 北京:航空工业出版社,2000.
[3] Steve Teixeira,Xavier Pacheco.Delphi5 Developers Guide.Sams publishing,2000.。