OLE方式控制WORD生成一个文档,包括自动生成表格

delphi操作word delphi操作word一、Delphi程序启动Word采用CreateOleObjects的方法来启动Word,调用VBA代码,具体实现过程为:首先使用GetActiveOleObject(Word.Application)判断当前内存中是否存在Word程序,如果存在,则直接连接,如果没有Word程序,则使用CreateOleObject(Word.Application)启动Wor 阅读详情

 

 

 

unit Unit1;

interface

uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   InsertLines(LineNum   :   Integer);  
          procedure   CreateMailMergeDataFile;  
          procedure   FillRow(Doc   :   Variant;   Row   :   Integer;  
                                    Text1,Text2,Text3,Text4   :   String);  
      private  
          {   Private   declarations   }  
      public  
          wrdApp,   wrdDoc:   Variant;  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  uses   ComObj;  
   
  Const   wdAlignParagraphLeft   =   0;  
  Const   wdAlignParagraphCenter   =   1;  
  Const   wdAlignParagraphRight   =   2;  
  Const   wdAlignParagraphJustify   =   3;  
  Const   wdAdjustNone   =   0;  
  Const   wdGray25   =   16;  
  Const   wdGoToLine   =   3;  
  Const   wdGoToLast   =   -1;  
  Const   wdSendToNewDocument   =   0;  
   
  {$R   *.DFM}  
   
  procedure   TForm1.InsertLines(LineNum   :   Integer);  
  var  
      iCount   :   Integer;  
  begin  
      for   iCount   :=   1   to   LineNum   do  
            wrdApp.Selection.TypeParagraph;  
  end;  
   
  procedure   TForm1.FillRow(Doc   :   Variant;   Row   :   Integer;  
                                    Text1,Text2,Text3,Text4   :   String);
  begin  
      Doc.Tables.Item(1).Cell(Row,1).Range.InsertAfter(Text1);  
      Doc.Tables.Item(1).Cell(Row,2).Range.InsertAfter(Text2);  
      Doc.Tables.Item(1).Cell(Row,3).Range.InsertAfter(Text3);  
      Doc.Tables.Item(1).Cell(Row,4).Range.InsertAfter(Text4);  
  end;  
   
  procedure   TForm1.CreateMailMergeDataFile;
  var  
      wrdDataDoc   :   Variant;  
      iCount   :   Integer;  
  begin  
      //   Create   a   data   source   at   C:/DataDoc.doc   containing   the   field   data  
      wrdDoc.MailMerge.CreateDataSource('C:/DataDoc.doc',,,'FirstName,   LastName,'   +  
                '   Address,   CityStateZip');  
      //   Open   the   file   to   insert   data  
      wrdDataDoc   :=   wrdApp.Documents.Open('C:/DataDoc.doc');  
      for   iCount   :=   1   to   2   do  
          wrdDataDoc.Tables.Item(1).Rows.Add;  
      //   Fill   in   the   data  
      FillRow(wrdDataDoc,   2,   'Steve',   'DeBroux',  
                  '4567   Main   Street',   'Buffalo,   NY     98052');  
      FillRow(wrdDataDoc,   3,   'Jan',   'Miksovsky',  
                  '1234   5th   Street',   'Charlotte,   NC     98765');  
      FillRow(wrdDataDoc,   4,   'Brian',   'Valentine',  
                  '12348   78th   Street     Apt.   214',   'Lubbock,   TX     25874');  
      //   Save   and   close   the   file  
      wrdDataDoc.Save;  
      wrdDataDoc.Close(False);  
  end;  

  procedure   TForm1.Button1Click(Sender:   TObject);
  var  
      StrToAdd   :   String;  
      wrdSelection,   wrdMailMerge,   wrdMergeFields   :   Variant;  
  begin  
      //   Create   an   instance   of   Word   and   make   it   visible
      wrdApp   :=   CreateOleObject('Word.Application');  
      wrdApp.Visible   :=   True;  
      //   Create   a   new   document  
      wrdDoc   :=   wrdApp.Documents.Add();  
      wrdDoc.Select;  
   
      wrdSelection   :=   wrdApp.Selection;  
      wrdMailMerge   :=   wrdDoc.MailMerge;  
   
      //   Create   MailMerge   data   file  
      CreateMailMergeDataFile;
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'State   University'   +   Chr(13)   +  
                              'Electrical   Engineering   Department';  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphCenter;  
      wrdSelection.TypeText(StrToAdd);  
   
      InsertLines(4);  
   
      //   Insert   Merge   Data  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphLeft;  
      wrdMergeFields   :=   wrdMailMerge.Fields;  
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');  
      wrdSelection.TypeText('   ');  
      wrdMergeFields.Add(wrdSelection.Range,'LastName');  
      wrdSelection.TypeParagraph;  
      wrdMergeFields.Add(wrdSelection.Range,'Address');  
      wrdSelection.TypeParagraph;  
      wrdMergeFields.Add(wrdSelection.Range,'CityStateZip');  
   
      InsertLines(2);  
   
      //   Right   justify   the   line   and   insert   a   date   field   with  
      //   the   current   date  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphRight;  
      wrdSelection.InsertDateTime('dddd,   MMMM   dd,   yyyy',False);  
   
      InsertLines(2);  
   
      //   Justify   the   rest   of   the   document  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphJustify;  
   
      wrdSelection.TypeText('Dear   ');  
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');  
      wrdSelection.TypeText(',');  
      InsertLines(2);  
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'Thank   you   for   your   recent   request   for   next   '   +  
              'semesters   class   schedule   for   the   Electrical   '   +
              'Engineering   Department.     Enclosed   with   this   '   +  
              'letter   is   a   booklet   containing   all   the   classes   '   +
              'offered   next   semester   at   State   University.     '   +  
              'Several   new   classes   will   be   offered   in   the   '   +  
              'Electrical   Engineering   Department   next   semester.     '   +  
              'These   classes   are   listed   below.';  
      wrdSelection.TypeText(StrToAdd);  
   
      InsertLines(2);  
   
      //   Insert   a   new   table   with   9   rows   and   4   columns  
      wrdDoc.Tables.Add(wrdSelection.Range,9,4);  
      wrdDoc.Tables.Item(1).Columns.Item(1).SetWidth(51,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(2).SetWidth(170,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(3).SetWidth(100,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(4).SetWidth(111,wdAdjustNone);  
      //   Set   the   shading   on   the   first   row   to   light   gray  
      wrdDoc.Tables.Item(1).Rows.Item(1).Cells  
              .Shading.BackgroundPatternColorIndex   :=   wdGray25;  
      //   BOLD   the   first   row  
      wrdDoc.Tables.Item(1).Rows.Item(1).Range.Bold   :=   True;  
      //   Center   the   text   in   Cell   (1,1)  
      wrdDoc.Tables.Item(1).Cell(1,1).Range.Paragraphs.Alignment   :=  
                  wdAlignParagraphCenter;  
   
      //   Fill   each   row   of   the   table   with   data  
      FillRow(wrdDoc,   1,   'Class   Number',   'Class   Name',   'Class   Time',    
            'Instructor');  
      FillRow(wrdDoc,   2,   'EE220',   'Introduction   to   Electronics   II',  
            '1:00-2:00   M,W,F',   'Dr.   Jensen');  
      FillRow(wrdDoc,   3,   'EE230',   'Electromagnetic   Field   Theory   I',  
            '10:00-11:30   T,T',   'Dr.   Crump');  
      FillRow(wrdDoc,   4,   'EE300',   'Feedback   Control   Systems',  
            '9:00-10:00   M,W,F',   'Dr.   Murdy');  
      FillRow(wrdDoc,   5,   'EE325',   'Advanced   Digital   Design',  
            '9:00-10:30   T,T',   'Dr.   Alley');  
      FillRow(wrdDoc,   6,   'EE350',   'Advanced   Communication   Systems',  
            '9:00-10:30   T,T',   'Dr.   Taylor');  
      FillRow(wrdDoc,   7,   'EE400',   'Advanced   Microwave   Theory',  
            '1:00-2:30   T,T',   'Dr.   Lee');  
      FillRow(wrdDoc,   8,   'EE450',   'Plasma   Theory',  
            '1:00-2:00   M,W,F',   'Dr.   Davis');  
      FillRow(wrdDoc,   9,   'EE500',   'Principles   of   VLSI   Design',  
            '3:00-4:00   M,W,F',   'Dr.   Ellison');  
   
      //   Go   to   the   end   of   the   document  
      wrdApp.Selection.GoTo(wdGotoLine,wdGoToLast);  
      InsertLines(2);  
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'For   additional   information   regarding   the   '   +  
                            'Department   of   Electrical   Engineering,   '   +  
                            'you   can   visit   our   website   at   ';  
      wrdSelection.TypeText(StrToAdd);  
      //   Insert   a   hyperlink   to   the   web   page  
      wrdSelection.Hyperlinks.Add(wrdSelection.Range,'http://www.ee.stateu.tld');  
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   '.     Thank   you   for   your   interest   in   the   classes   '   +  
                            'offered   in   the   Department   of   Electrical   '   +  
                            'Engineering.     If   you   have   any   other   questions,   '   +  
                            'please   feel   free   to   give   us   a   call   at   '   +  
                            '555-1212.'   +   Chr(13)   +   Chr(13)   +  
                            'Sincerely,'   +   Chr(13)   +   Chr(13)   +  
                            'Kathryn   M.   Hinsch'   +   Chr(13)   +  
                            'Department   of   Electrical   Engineering'   +   Chr(13);  
      wrdSelection.TypeText(StrToAdd);  
   
      //   Perform   mail   merge  
      wrdMailMerge.Destination   :=   wdSendToNewDocument;  
      wrdMailMerge.Execute(False);  
   
      //   Close   the   original   form   document  
      wrdDoc.Saved   :=   True;  
      wrdDoc.Close(False);  
   
      //   Notify   the   user   we   are   done.  
      ShowMessage('Mail   Merge   Complete.');  
   
      //   Clean   up   temp   file  
      DeleteFile('C:/DataDoc.doc');  
  end;

end.

office 复合文档数据结构解析“初探” 一、OLE(Object Linking and Embedding) 文件二进制结构 Office 文档(如:.doc、.ppt、.xls等)很多是复合文档(OLE文件),所有文件数据都是存储在一个或多个流中。每 个流都有一个相似的数据结构,用于存储元数据的数据结构。这些元数据有用户和系统的信息、文件属性、格式信 息、文本内容、媒体内容。宏代码信息也是以这种方式存储在复合文档中的。为了在...... 阅读详情

相关推荐

告别OLE和DOI:用SAP ABAP的cl_docx_document类搞定复杂Word模板打印(附完整代码)

本文详细介绍了如何利用SAP ABAP的cl_docx_document类实现高效、稳定的Word模板打印解决方案,替代传统的OLE和DOI方法。通过XML操作原理,该方法解决了格式控制、性能瓶颈和服务器兼容性问题,并附有完整代码示例和实战技巧。

weixin_33734785的博客 415

用bcb实 现Word 97 自 动 化

  ---- 要 在 应 用 程 序 中 控 制Word 97的 运 行, 首 先 必 须 在 编 制 自 动 化 客 户 程 序 时 使 其 头 文 件中 包 含 文 件ComObj.hpp, 写 入 #include 。 编 程 工具C + + Builder 的 开 发 者 把 调 用Word 97 自 动 化 对 象 的 功 能 大致 包 装 成 了 几 个Ole object class

fleamboy的专栏 1071

java导出生成word技术选型

1. 背景 在项目中需要将一些信息导出到word中,目前导出到word大致有6种解决方案 jacob Apache POI java2word itext JSP输出样式 使用xml 2. 技术选型 pageoffice 集成还是挺方便的,但是要安装它的软件 2.1 Jacob Jacob是Java-COM Bridge的缩写。他在java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接

建洋的博客 1160

用Delphi进行word开发

使用以CreateOleObjects方式调用Word 实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。 ----------------------------------------- Word宏编辑器 Word能够真正地进行VBA代码的编辑,可以编写窗体、函数。 进入Word宏编辑器的方法:工具->宏->Vis

diligentcat的专栏 2537

PowerBuilder调用Word文档处理实战详解

htmltable {th, td {th {pre {简介:在IT开发中,PowerBuilder(PB)作为强大的数据库应用开发工具,常需与Microsoft Word集成以实现文档自动化处理。本文介绍如何通过OLE自动化技术在PB中调用Word,完成文档的创建、编辑、保存与关闭等操作。内容涵盖OLE对象创建、Word对象模型调用、错误处理机制及性能优化策略,适用于报告生成、模板打印等企业级应用场景。

weixin_42527665的博客 1070

Java基于Apache POI动态生成Word文档实战

在现代企业级应用开发中,文档自动化已成为提升效率、减少人工干预的重要手段。尤其是在报表生成、合同定制、数据导出等业务场景下,Java作为主流后端语言,具备强大的生态支持来实现Word文档的动态生成。本章将系统性地介绍Java动态生成Word的核心价值与技术背景,阐述其相较于传统手动编写文档的优势,包括可重复性、准确性以及与业务系统的无缝集成能力。当前主流技术方案中,Apache POI凭借对 Microsoft Office 格式的深度兼容,成为处理.docx文件的事实标准。

weixin_42581003的博客 1222

在Delphi中很精确地控制生成的WORD文档的格式

var    WordApplication1: TWordApplication; 通过以下的方式就可以在DELPHI中很精确地控制生成的WORD文档的格式。     //-----------------打开WORD-------------------------------      Wordapplication1.visible := true;    //显示WROD    

han99yi的专栏 4876

Delphi实现Word文档内容读取指南

Ole Automation(对象链接与嵌入自动化)技术是一项由微软公司开发的组件对象模型(COM)的扩展技术。这项技术允许应用程序通过编程方式控制另一个应用程序或组件,实现自动化处理。它建立在Ole技术的基础上,让应用程序能够通过定义好的接口进行交互,从而实现复杂功能的自动化。Ole Automation广泛应用于Windows操作系统中,用于实现文档处理、数据管理、网络管理等自动化任务。

weixin_26805451的博客 541

用DELPHI怎样生成WORD表格文档

Delphi与Word之间的融合技术      一、VBA代码含义      Microsoft   Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处      理系统,它集成了Microsoft   Visual   Basic,可以通过编程来实现对Word功能的扩展。      Microsoft   Visual   Basic在word中的代码即Wor

woshizhaoxuhui的专栏 2252

pb oleobject word使用

pb oleobject word使用

AD域控设置客户端桌面壁纸

此时再右键wallpaper文件夹,共享选项下的网络路径已经有了。找到该域下的组策略编辑器(第一步有)并按照图下所示找到桌面壁纸的策略设置,点击进去。在高级共享里可以设置共享名和同时共享的用户数量限制。点击下拉箭头,找到Everyone并选择,点击添加后,点击共享。然后可以看到刚才的新建文件夹策略在域控服务器和客户端都生效了。右键wallpaper文件夹->属性,点击共享选项,点击共享。在弹出的窗口里,按照图下所示设置,点击应用并且确认。在弹出的窗口里,按图示找到文件夹,右键新建文件夹。

欲买桂花同载酒的博客 6054

记录一次用Java生成word文档的经验

业务背景 最近接到一个需求需要将学员的基本信息生成word格式的内容,word的格式如下图所示 开发的任务就是将学员的信息替换掉表格中的** 即可,感觉还蛮简单的。 相信大家以前做的最多的是Java和Excel的转换的功能比较多吧,我也是如此,之前也没有做过word转换的功能,所以此次接到这个任务我也是一样,从网上找方法,在网上找了一些博客论坛大概有几种方法可以尝试。 几种解决思路 1:Jaco...

xiongyouqiang的博客 1万+

Frida实战:从adb连接到安卓设备参数加密Hook全流程解析

本文详细解析了使用Frida进行安卓应用动态分析的全流程。通过adb连接设备并部署Frida服务端,结合静态分析与动态Hook技术,精准定位并拦截关键函数,特别是针对参数加密等核心逻辑的实时监控与修改,为逆向分析与安全研究提供了高效实战方案。

weixin_29208077的博客 342

java POI 导出 word 文档

优点:跨平台支持windows、unix和linux,生成word文件格式标准,支持文本、图片、表格、字体、段落、颜色、超链、页眉等各种格式的操作,支持多word合并,无需处理并发,不耗费服务器资源,运行稳定。这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。缺点:生成的文件本质上是xml,不是真正的word文件格式,有很多常用的word格式无法处理或表现怪异,比如:超链、换行、乱码、部分生成的文件打不开等。

weixin_42396752的博客 3856

五、2K0300 久久派开发板的GPIO控制与Shell脚本自动化实战

本文详细介绍了基于龙芯2K0300处理器的久久派开发板的GPIO控制方法,通过sysfs文件系统实现LED控制和传感器读取。重点讲解了Shell脚本自动化实战,包括LED闪烁、流水灯效果和传感器数据采集,为物联网项目开发提供完整解决方案。

silver的专栏 687

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2014

如何使用Java将Excel数据(含合并单元格)转换为Word表格

这篇文章介绍如何使用Java将Excel数据(含合并单元格)转换为Word表格并保留格式。

nuclear2011的博客 2959

KUKA机器人与S7-1200 PLC实现Profinet通讯配置步骤详解

在工业自动化产线中,PLC与工业机器人之间的高效数据交换是控制逻辑落地的关键。传统硬接线方案在信号点多时布线复杂、故障排查困难,而现场总线技术通过一根网线即可实现主从设备间的周期通讯。Profinet作为主流工业以太网协议,由S7-1200作为IO Controller主站,KUKA机器人作为IO Device从站,在WorkVisual与TIA Portal中完成设备组态、I/O映射及信号分配,即可替代成捆电缆,稳定传输启停、状态及报警信号。这一方案适用于汽车、3C、物流等行业的自动化产线,尤其适合需要扩

weixin_42519985的博客 251

java生成word的几种方案

1、 Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。 2、 Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的...

qq_33271461的博客 1107

rk3566-11.0新增device分区

1.增加块设备 2.修改根目录节点权限 3.开机启动自动挂载 增加块设备 1.修改parameter.txt文件,新增块设备大小及命名 device/rockchip/rk356x/rk3566_r/parameter.txt FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3566_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE

weixin_51115260的博客 3384

YOLO26改进 - C2PSA | C2PSA融合DiffAttention差分注意力:轻量级差分计算实现高效特征降噪,提升模型抗干扰能力

本文介绍了 DiffCLIP,一种将差分注意力机制集成到 CLIP 架构的视觉 - 语言模型,并将其应用于 YOLO26。差分注意力机制通过计算两个互补注意力分布的差值,抵消无关信息干扰。单头差分注意力将 Q 和 K 拆分,分别计算注意力分布后做差值融合;多头差分注意力则每个头独立执行差分操作后聚合输出。关键参数 λ 可动态调控噪声抵消强度。我们将 DiffAttention 代码集成到 YOLO26 中,替换原有模块。实验表明,改进后的 YOLO26 在图像 - 文本理解任务中表现出色。

魔改工程师的博客 601

Java生成复杂word方案(FreeMarker + xml)

首先介绍几种java导出word方案   1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。   2、 Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE...

keke_Xin的专栏 1451

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2862

java导出生成word的简单方法

最近做的项目,需要将一些信息导出到word中。在网上找了好多解决方案,现在将这几天的总结分享一下。 目前来看,java导出word大致有6种解决方案:   1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。该方案只能在windows平台实现,是其局限性。   2、Apache POI包括一系列的API,它

lgxzzz的博客 1297

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: OLE方式 word中插入图片
下一篇: TOLEContainer部件
pgnet
博客等级 码龄20年 9粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值