利用C++Builder 6 中OLE自动化功能实现调用Word进行报表制作

C++Builder中使用OLE技术保存数据到Excel/Word OLE(对象链接与嵌入)是一种在Windows操作系统中实现应用间集成的技术。它允许用户将文档的一部分(例如对象、图表、图像等)从一个应用程序嵌入到另一个应用程序中,或者将对象链接起来,使数据保持同步更新。OLE技术的基础是COM(组件对象模型),它定义了组件如何交互和通信。OLE技术的使用可以简化软件开发,提高工作效率,并减少重复性工作。在C++Builder中,OLE功能通过OLE控件来实现。OLE控件允许开发者在窗体上创建和管理OLE对象,从而实现与其他应用程序的交互。 阅读详情

利用C++Builder 6 中OLE自动化功能实现调用Word进行报表制作
本文为原有篇幅在CB6下编写代码的补充,CB5下开发可以参考原有文章

一、概述
  
在我们利用C++Builder进行报表设计和打印处理时,我们往往是用C++Builder自己所提供的QReport组件页中的组件进行报表的设计和输出。但这样输出的表格都是事先设计好,并且不容易修改的表格,在系统移植后和需要对表格进行修改时就显得非常麻烦。那么,有什么好的解决方法来实现既可以自动生成报表,同时有能够对生成的报表进行灵活地修改呢?
  几乎每一个用过Miscrosoft Office 2000 中Word字处理软件的人都知道:Word是一个强大的文字、表格、排版处理软件。在Word中可以设置不同的字体、字号,绘制各种不同形状的表格……。Word强大的功能给我们在使用它的过程中留下了深刻的印象。
  如果我们能将C++Builder中处理好需要生成为报表的数据导入到Word中;在Word中对生成的报表还可以修改、排版那该多好啊!答案是肯定的,我们能够在C++Builder中调用Word ,生成各种不同的报表。

二、实现
  下面我们将用具体的实例来说明如何运用C++Builder调用Word进行报表的设计和制作。,我们在安装了C++Builder和Word后就可以进行应用程序的设计了,在安装C++Builder的过程中将选择当前您所使用的系统中Office的版本,C++Builder可以选择两种版本:Office2000版和Office97版。在我们所举的实例中都是在Office2000版下进行的。

 

(实例1)
  以下的一个例子将详细地说明在C++Builder中如何调用Word并打印出一个字符串来。
  
步骤1 打开C++Builder开发平台,创建一个新的项目
  步骤2 在C++Builder的组件面板中找到Office2K组件页,在这个组件页上我们可以看到如下组件:
  在这里我们对这些组件中调用Word部分进行概括的说明:
  WordGlobal  组件:对Word的最高级属性和方法进行调用。
  WordApplication组件:Word应用程序组件,完成对Word应用程序的调用。是实现Word调用的核心组件。

  WordDocument组件:Word文档处理组件,用于处理文档的具体内容。
  WordFont组件:用于设置Word中的字体、字号等文字设置信息。
  WordParagraphFormat组件:用于对Word中的段落格式进行处理。
  WordLetterContent组件:对由信函向导创建的信函的元素进行调用的组件。


  步骤3 在新项目的Form表单中添加一个WordApplication组件,将name属性改为:            WordApp1。
  步骤4 添加一个按钮组件到Form表单上将按钮的Caption属性设置为:“Word调用”
  步骤5 双击按钮组件切换到代码编辑窗口,添加如下代码:


try{
   WordApp->Connect();              
//与Word进行连接
   WordApp->Documents->Add();         
//建立一个新文档
   WordApp->Documents->Item(Variant(1))->Range()->InsertAfter(StringToOleStr("这是一段测试文字"));
                       
//在文档中添加一段新文本
   WordApp->Application->Visible=true;  //显示Word

}
catch(...)

{
  ShowMessage("您可能没有安装Word!");
  WordApp->Disconnect();
} 


  步骤6 编译运行程序。这时,我们单击“Word调用”按钮就可以看到:Word程序自动运行,同时在Word中显示出一串字符串,整个程序的调用就完成了。
分析:

  这是最简单的Word调用实例。下面,我们就来分析一下我们所输入的代码:
         WordApp->Connect();
  这一条语句是将我们的应用程序和Word进行连接,如果连接失败可能是因为没有安装Word或Word发生错误。因此,我们用    try... catch(...)...     语句来对可能产生的错误进行处理。
         WordApp->Disconnect();
  这条语句与上一条语句是进行相反的操作,如果您已经与Word进行了连接,那么这条语句就是断开与Word的连接。需要注意的是:如果您没有关闭Word程序,在C++Builder中运行该语句,则可能导致产生连接错误。
         WordApp->Documents->Add();
  这条语句是在Word中建立一个新的文档,由于Word是一个多文档的处理程序,因此我们可以建立多个文档来进行操作。文档间又由Document下的Item函数来区分的。例如在程序中我们使用了:
         WordApp->Documents->Item(Variant(1))来返回一个具体文档的指针。
  Range()函数是用来设置在文档中所操作文本的范围,如果Range()函数中没有任何参数,则表明在所有的范围内进行操作。我们利用Range返回的指针中Text属性写入一个字符串,在文档中就可以看到这个字符串了。
  最后我们所做的工作就是将Word程序运行的结果显示出来。我们运用 
                  WordApp->Application->Visible属性来实现
。



 

(实例2) 
  在这个实例中,我们将更加深入地探讨C++Builder调用Word程序实现报表的方法。其中将包括字体的设置,段落的格式等操作。我们将在Word中输出三段文字其中第一段文字的字体设置为黑体并且居中、字号为二号字,第二段文字将字体设置为宋体五号字,第三段文字将居右并为宋体小五号字。
我们建立两个调用Word的对象,一个为WordApplication对象,另一个为WordDocument对象。对象的名称分别为:WordApp和WordDoc。
  下面是整个程序的代码: 


try{
     WordApp->Connect();                                         //连接Word
     WordApp->Documents->Add();                                  //建立一个新文档
     WordDoc->ConnectTo(WordApp->Documents->Item(Variant(1)));
                                      //将WordDocument对象与WordApplication对象进行连接
     WordDoc->Paragraphs->Add();                                 //添加一个段
    WordDoc->Paragraphs->Item(Variant(1))->Range->Font->set_Name(WideString("黑体"));
                                                                 //设置该段文本字体
     WordDoc->Paragraphs->Item(Variant(1))->Range->Font->set_Size(20);  //设置字号
     WordDoc->Paragraphs->Item(Variant(1))->Range->set_Text(WideString("这是第一段文字!"));
                                                                 //当前段文字
     WordDoc->Paragraphs->Item(Variant(1))->Alignment=wdAlignParagraphCenter;
                                                                //设置该段文字居中
     WordDoc->Paragraphs->Add();                                //添加一个段
     WordDoc->Paragraphs->Item(Variant(2))->Range->Font->set_Name(WideString("宋体"));
                                                                //设置该段文本字体
     WordDoc->Paragraphs->Item(Variant(2))->Range->Font->set_Size(12);  //设置字号
     WordDoc->Paragraphs->Item(Variant(2))->Range->set_Text(WideString("这是第二段文字!")); 
                                                                //当前段文字
     WordDoc->Paragraphs->Item(Variant(2))->Alignment=wdAlignParagraphLeft;
                                                                //设置该段文字居左
     WordDoc->Paragraphs->Add();                                //添加一个段
     WordDoc->Paragraphs->Item(Variant(3))->Range->Font->set_Name(WideString("宋体"));
                                                                //设置该段文本字体
     WordDoc->Paragraphs->Item(Variant(3))->Range->Font->set_Size(10);  //设置字号
     WordDoc->Paragraphs->Item(Variant(3))->Range->set_Text(WideString("这是第三段文字!"));
                                                                //当前段文字
     WordDoc->Paragraphs->Item(Variant(3))->Alignment=wdAlignParagraphRight;
                                                              //设置该段文字居右
     WordApp->Application->Visible=true;
   }
   catch(...)

   {
     ShowMessage("您可能没有安装Word!");
     WordApp->Disconnect();
   }

分析:
  在这段程序中我们使用了两个关于Word调用的组件,在WordDocument组件中我们运用ConnectTo函数与WordApplication相连接,通过这种连接就可以方便地使用WordDocument组件所提供的功能对Word的其中一个文档进行具体地操作。使我们更加方便地控制与修改我们所产生的报表。
 
  在WordDocument组件的使用中,我们运用了Paragraphs来对Word中的段落进行操作,其中包括了段落中字体的设置和段落的排版式样等。由此可见C++Builder为我们提供了一个非常方便的Word调用组件来让我们实现Word的应用。
拓展:
  如果我们需要对段落中的其中一部分进行字体的设置那应该怎么办呢?我们在刚才的程序中看到:对段落的字体进行设置的语句是这样的:
   WordDoc->Paragraphs->Item(Variant(2))->Range->Font->set_Size(12);
假如我们要设置段落中第5个字符为9号字,那么我们就需要限制字体设置的范围,程序如下:


WordDoc->Paragraphs->Item(Variant(2))->Range->Select();//将第二段文字选择上
WordApp->Selection->Start=WordApp->Selection->Start+5;
                                          //
在选择的范围中的第5个字符作为选择的开始字符
WordApp->Selection->End=WordApp->Selection->Start+1;
                                          //
将选择的结束字符设置为开始字符加1个字符
WordApp->Selection->Font->set_Size(9);         //
将最后选择的字符的字体设置为9号字



(实例3)
  这个实例将说明在C++Builder中调用Word绘制表格的方法,其中包括表格的生成、单元格的控制与操作等。下面的这段代码将实现在Word中绘制一个4乘8的表格。



WordDoc->Tables->Add(WordDoc->Range(EmptyParam,EmptyParam),4,8); 
                                                   //
在Word中添加一个表格



  在这里我们调用了WordDocument对象中的Tables来实现表格的绘制。Add函数是添加一个表格。其中的参数为:表格添加在文档中的位置,表格行,表格列的数量。参数中EmptyParam为已定义的常量。如果我们需要将表格添加到整个文档的末尾,我们可以将这段代码改为:



WordDoc->Tables->Add(WordDoc->
      Range(Variant(WordDoc->Range(EmptyParam,EmptyParam)->End-1),EmptyParam),4,8); 
                                                   //
在Word文档末尾添加一个表格




 

 

在表格中,我们如果需要对单元格进行操作,例如在第3行、第5列的这个单元格我们需要插入一段文本,则可以这样操作:



WordDoc->Tables->Item(Variant(1))->
         Cell(Variant(3),Variant(5))->Range->set_Text(WideString("
添加的文本"));



其中,Item中的值为指定需要进行操作的表格。Cell中的值为指定表格中的单元格位置。
  在表格中如果我们需要合并两个单元格可以对单元格进行如下操作:



WordDoc->Tables->Item(Variant(1))->Cell(Variant(3),Variant(5))->
           Marge(WordDoc->Tables->Item(Variant(1))->Cell(Variant(3),Variant(6)));
                                                  //
将表格中(3,5)与(3,6)单元格合并



在表格中如果我们需要拆分单元格则进行如下操作:



WordDoc->Tables->Item(Variant(1))->Cell(Variant(3),Variant(5))->
            Split(Variant(2),Variant(3));
                                             //
将表格中(3,5)单元格拆分为2行3列的单元格



 通过这个实例我们掌握了C++Builder中调用Word进行表格绘制的基本方法,同时对表格中单元格的基本操作也有了一定地了解。下面的实例是如何在Word中添加图像。



我们在Word中添加图像的基本方法是运用剪贴板来进行图像的添加的。我们先把图像复制到剪贴板然后在Word中粘贴就可以了。例如我们从数据库中存储的图像调入到Word中其代码如下:



   DBImage->CopyToClipboard();             //
图像复制到剪贴板
         WordDoc->Sentences->Last->Paste();      //
粘贴到Word中    



小结:
  关于在C++Builder中调用Office来进行数据、报表等处理的方法还有很多种。在这里我仅仅只是介绍了Word调用中常用到的几种调用方法,涉及到的范围还很小。我只是希望能够引起大家对程序开发感兴趣,运用C++Builder开发出更多、更好的应用程序来。
   

 

通过OLE读写WORD文件 在BCB中,通过调用OLE,读写WORD文件。 立即下载

相关推荐

c++buider 轻松操作Word,Excel

通过OLE技术操作WORD,ECXEL,可以使你的软件具有更好的交互性。

BCB操作Word文档

虽然对BCB深恶痛绝,可是任务需要,只能硬着头皮上。之前看过别人的代码,以为自己对BCB操作Word文档已经掌握了,拿来编译却不能通过,才知道人家的不是直接给予CB的函数,而是又加了一层包装,他的代码更直观了。今天上边催的紧,只好上网搜索,才知道BCB操作Word文档有两种范型。我很不喜欢GetPropertyOf()之类的代码,可是网上却充斥着这样的。费尽心机,终于找到了类似VBA的。我的代

thiswolf的专栏 3936

操作Word,内容丰富,解析全面!!含源码,直接可用!!c++builder精彩编程!

操作Word,内容丰富,解析全面!!含源码,直接可用!!c++builder精彩编程!

bcb6操作word

Variant ex,wb,sheet,range;  try  {   ex=CreateOleObject("Excel.Application");//创建应用对象  }  catch(...)  {   MessageBox(0, "启动Excel出错,可能是没有安装Excel","DBGrid2Excel",MB_OK | MB_ICONERROR);   return;

kyfvc的专栏 2441

c++Builder 操作Excel (word文档)

讲述C++Builder操作Excel的对像,很实用, 有代码。

用BCB操作Word文档

1、使用C++ Builder 6.0 读写Word文档中的表格的内容。 2、不新建表格。 3、基于网络上的程序更改,回到网络。 4、包含工程文件和可执行文件

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作一、概述  在我们利用C++Builder进行报表设计和打印处理时,我们往往是用C++Builder自己所提供的QReport组件页中的组件进行报表的设计和输出。但这样输出的表格都是事先设计好,并且不容易修改的表格,在系统移植后和需要对表格进行修改时就显得非常麻烦。那么,有什么好的解决方法来实现既可以自动生成报表,同时有能

ktcserver的专栏 5843

ESP-IDF的安装及其在VScode中编译环境的搭建

从安装目录的\Espressif\frameworks\esp-idf-v5.3.2\examples路径中拷贝一个工程到项目中,比如拷贝\get-started下的hello_world文件夹。安装时可能会遇到如下问题,提示:"e:\ssc\software\ESP-IDF\v5.3.2\Espressif\tools\idf-python\3.11.2\python.exe -m pip" is not valid. (ERROR_INVALID_PIP)接着等待安装完成即可,其他步骤同方式1。

Freddy_Ssc的博客 4365

BCB 读写Word文档

1 void __fastcall TForm1::btn1Click(TObject *Sender) 2 { 3 4 5 Variant WordApp,WordDocs,WordDoc; 6 Variant word_activedoc; 7 Variant word_select; 8 Variant word_table; 9 ...

weixin_34124651的博客 557

Xshell 连接 VMware虚拟机操作 截图和使用

vmwareVMware总部位于美国加州帕洛阿尔托(Palo Alto),是全球云基础架构和移动商务解决方案厂商,提供基于VMware的解决方案,企业通过数据中心改造和公有云整合业务,借助企业安全转型维系客户信任,实现任意云端和设备上运行、管理、连接及保护任意应用Xshell(安全终端模拟软件)Xshell [1]是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。

小 tom的博客 802

稀疏阵列选型指南:互质阵、嵌套阵、MRA,谁才是你项目里的‘性价比之王’?

本文深入探讨了稀疏阵列技术中的互质阵、嵌套阵和MRA三大架构的工程化选型策略,重点分析了它们在DOA估计、自由度、旁瓣抑制和计算复杂度等核心指标上的表现。通过实际案例和配置示例,为智能天线、声学定位和毫米波雷达等应用场景提供技术选型指南,帮助研发团队在硬件成本与性能之间找到最佳平衡点。

weixin_42525005的博客 488

用C++Builder实现Word 97自动化

用C++Builder实现Word 97自动化江西南昌华东交大控制信息工程研究所(330013)刘遵雄  ----要在应用程序中控制Word 97的运行,首先必须在编制自动化客户程序时使其头文件中包含文件ComObj.hpp,写入#include。编程工具C++Builder的开发者把调用Word 97自动化对象的功能大致包装成了几个Ole object class函数,应用程序设计人员可以很

holyfire的专栏 1616

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 193

[C++] 用 C++ Builder 实现 Word 97 自动化

用C++Builder实现Word 97自动化  ----要在应用程序中控制Word 97的运行,首先必须在编制自动化客户程序时使其头文件中包含文件ComObj.hpp,写入#include。编程工具C++Builder的开发者把调用Word 97自动化对象的功能大致包装成了几个Ole object class函数,应用程序设计人员可以很方便地利用它们。 *设定Ole对象的属性:     

shine的现在进行时 1524

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档

宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。

weixin_45285654的博客 1153

SPSS 多重共线性问题:编程解决方案

多重共线性会导致回归模型的不稳定性,使得估计的回归系数失去解释力,降低模型的准确性和可靠性。通过执行这些代码,你将能够计算和查看VIF和CI的结果,并确定是否存在多重共线性问题。上述代码执行了一个回归分析,其中A是我们感兴趣的因变量,B、C、D和E是我们要检查的自变量。接下来,我们将执行多重共线性的检测。通过执行上述代码,你将能够看到每个自变量的VIF和CI值,以及预先设置的阈值。上述代码将计算VIF和CI的值,并将结果写入指定路径的结果文件中。接下来,我们可以使用以下代码来计算和显示VIF和CI的值。

CyberGenius的博客 1426

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作 (转)

利用C++Builder 中OLE自动化功能实现调用Word进行报表制作 (转)[@more@]利用C++Builder 中OLE自动化功能实现调用word进行报表制作 一、概述  在我们利用C++Builder进行报表设计和...

ciya3282的博客 304

三峡大学-微机原理与接口技术实验

其中,A15接E1,因此,A15为1,A14A13A12A11A10A9A8A7通过八输入与非门74LS30与E2连接,因此A14A13A12A11A10A9A8A7为11111111,A6A5A4与CBA连接,因此A6A5A4为101,A3A2A1A0不参与译码,因此IO5的地址范围为1111 1111 1101 0000B~1111 1111 1101 1111B,即0FFD0H~0FFDFH。如图1所示,若IO0输出为低电平,则需要E1接高电平,E2接低电平,E3接低电平,CBA的输入为000。

m0_62222486的博客 495

用C++Builder实现Word 97自动化 (转)

用C++Builder实现Word 97自动化 (转)[@more@]用C++Builder实现word 97自动化江西南昌华东交大控制信息工程研究所(330013)刘遵雄 ----要在应用程序中控制Word 97的运行,...

csd3176的博客 135

vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue2,nuxt2,高德地图,热力图,绘制热力图层,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅代表,人流量,vue2使用高德地图实现某个区域热力图,vue高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue2中使用高德地图渲染热力图组件,高德地图使用热力图详细教

✅ 精选推荐文章 4201

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 关于企业及时通系统中短信中心模块的分析
下一篇: 关于用W2K AD SERVER 和SQL2000企业版安装双机
ktcserver
博客等级 码龄24年 35粉丝 27原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值