`
txf2004
  • 浏览: 7041692 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Delphi和Word编程集锦

阅读更多

用Delphi合并Word表格中单元格

//合并Word表格中单元格
proceduremergeWordCell;
varWordApp:TWordApplication;
WordDoc:TWordDocument;
DocInx,oFileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat:OleVariant;
i,iRow,iCol:integer;
myCell:Cell;
myRow:Row;
begin
memo1.Lines.Clear;

//=====创建对象=====
ifnotAssigned(WordApp)then
begin
WordApp:
=TWordApplication.Create(nil);
WordApp.Visible:
=false;
end;
ifnotAssigned(WordDoc)then
WordDoc:
=TWordDocument.Create(nil);
try
DocInx:
=1;
oFileName:
='d: est.doc';
oReadOnly:
=true;
CfCversions:
=EmptyParam;
AddToRctFiles:
=EmptyParam;
PswDocument:
=EmptyParam;
PswTemplate:
=EmptyParam;
oRevert:
=EmptyParam;
WPswDocument:
=EmptyParam;
WPswTemplate:
=EmptyParam;
oFormat:
=EmptyParam;
//=====打开文件=====
WordApp.Documents.open(oFileName,CfCversions,oReadOnly,AddToRctFiles,
PswDocument,PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);
//=====关联文件=====
WordDoc.ConnectTo(WordApp.Documents.Item(DocInx));


//合并第一、二列
iStart:=WordDoc.Tables.Item(i).Cell(1,1).Range.Start;
myCol:
=WordDoc.Tables.Item(i).Columns.Item(2);
iEnd:
=myCol.Cells.Item(myCol.Cells.Count).Range.End_;
myRange:
=WordDoc.Range;
myRange.Start:
=iStart;
myRange.End_:
=iEnd;
myRange.Cells.Merge;

finally
ifAssigned(WordDoc)then//=====关闭文件=====
begin
WordDoc.Close;
WordDoc.Disconnect;
WordDoc.Destroy;
WordDoc:
=nil;
end;
ifAssigned(WordApp)then//=====关闭Word=====
begin
WordApp.Quit;
WordApp.Disconnect;
WordApp.Destroy;
WordApp:
=nil;
end;
end;
end;

取得Word 表格中的数据

//取得Word表格中的数据
proceduregetWordCellStr;
varWordApp:TWordApplication;
WordDoc:TWordDocument;
DocInx,oFileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat:OleVariant;
i,iRow,iCol:integer;
myCell:Cell;
myRow:Row;
begin
memo1.Lines.Clear;

//=====创建对象=====
ifnotAssigned(WordApp)then
begin
WordApp:
=TWordApplication.Create(nil);
WordApp.Visible:
=false;
end;
ifnotAssigned(WordDoc)then
WordDoc:
=TWordDocument.Create(nil);
try
DocInx:
=1;
oFileName:
='d: est.doc';
oReadOnly:
=true;
CfCversions:
=EmptyParam;
AddToRctFiles:
=EmptyParam;
PswDocument:
=EmptyParam;
PswTemplate:
=EmptyParam;
oRevert:
=EmptyParam;
WPswDocument:
=EmptyParam;
WPswTemplate:
=EmptyParam;
oFormat:
=EmptyParam;
//=====打开文件=====
WordApp.Documents.open(oFileName,CfCversions,oReadOnly,AddToRctFiles,
PswDocument,PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);
//=====关联文件=====
WordDoc.ConnectTo(WordApp.Documents.Item(DocInx));

//方法(1)==>规则表
Fori:=1ToWordDoc.Tables.Countdo//第i个表
begin//第iRow行
ForiRow:=1ToWordDoc.Tables.Item(i).Rows.Countdo
begin
//第iCol列
Foricol:=1ToWordDoc.Tables.Item(i).Columns.Countdo
begin
myCell:
=WordDoc.Tables.Item(i).Cell(iRow,icol);
memo1.Lines.add(myCell.Range.Text);
end;
end;
end;

//方法(2)==>不规则表:只有横向合并时
Fori:=1ToWordDoc.Tables.Countdo//第i个表
begin
ForiRow:
=1ToWordDoc.Tables.Item(i).Rows.Countdo
begin
myRow:
=WordDoc.Tables.Item(i).Rows.Item(iRow);//第iRow行
Foricol:=1TomyRow.Cells.Countdo//第iCol列
begin
myCell:
=myRow.Cells.Item(iCol);
memo1.Lines.add(myCell.Range.Text);
end;
end;
end;

//方法(3)==>不规则:横向、纵向合并时;任何表格
Fori:=1ToWordDoc.Tables.Countdo//第i个表
begin//第j个Cell
forj:=1ToWordDoc.Tables.Item(i).Range.Cells.Countdo
begin
myCell:
=WordDoc.Tables.Item(i).Range.Cells.Item(j);
memo1.Lines.add(myCell.Range.Text);
end;
end;

finally
ifAssigned(WordDoc)then//=====关闭文件=====
begin
WordDoc.Close;
WordDoc.Disconnect;
WordDoc.Destroy;
WordDoc:
=nil;
end;
ifAssigned(WordApp)then//=====关闭Word=====
begin
WordApp.Quit;
WordApp.Disconnect;
WordApp.Destroy;
WordApp:
=nil;
end;
end;
end;

取得Word文件的数据

//取得Word文件的数据
proceduregetWordStr;
varWordApp:TWordApplication;
WordDoc:TWordDocument;
DocInx,oFileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat:OleVariant;
i,iRow,iCol:integer;
myCell:Cell;
myRow:Row;
begin
memo1.Lines.Clear;

//=====创建对象=====
ifnotAssigned(WordApp)then
begin
WordApp:
=TWordApplication.Create(nil);
WordApp.Visible:
=false;
end;
ifnotAssigned(WordDoc)then
WordDoc:
=TWordDocument.Create(nil);
try
DocInx:
=1;
oFileName:
='d://est.doc';
oReadOnly:
=true;
CfCversions:
=EmptyParam;
AddToRctFiles:
=EmptyParam;
PswDocument:
=EmptyParam;
PswTemplate:
=EmptyParam;
oRevert:
=EmptyParam;
WPswDocument:
=EmptyParam;
WPswTemplate:
=EmptyParam;
oFormat:
=EmptyParam;
//=====打开文件=====
WordApp.Documents.open(oFileName,CfCversions,oReadOnly,AddToRctFiles,
PswDocument,PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);
//=====关联文件=====
WordDoc.ConnectTo(WordApp.Documents.Item(DocInx));


//方法(1):取整个文本的字符内容,包含表格
s:=WordDoc.Range.text;

//方法(2):取1--4位的字符,包含表格
myRange:=WordDoc.Range;
myRange.Start:
=0;
myRange.End_:
=4;

finally
ifAssigned(WordDoc)then//=====关闭文件=====
begin
WordDoc.Close;
WordDoc.Disconnect;
WordDoc.Destroy;
WordDoc:
=nil;
end;
ifAssigned(WordApp)then//=====关闭Word=====
begin
WordApp.Quit;
WordApp.Disconnect;
WordApp.Destroy;
WordApp:
=nil;
end;
end;
end;

Delphi+Word的数据库系统设计

Delphi擅长做数据库系统的开发,其功能强大,开发快速但现在大多数的数据库系统80%的工作都是简单的增删改的工作,用数据库系统来实现增删改,存在录入不方便,录入内容简单等问题,尤其对于处理大量的文本和图片的数据库系统来说更是非常不便报表输出还需要利用Delphi中各个版本提供的报表工具或第三方打印控件进行开发虽然Delphi中提供的报表工具功能逐渐强大,使用愈加方便,但是如果想充分利用该报表工具开发强大实用的报表,仍得花费一定的精力去学习该报表组件的各个功能例如Delphi6中提供的Qreport报表工具,对于制作复杂报表非常麻烦,也许BorLand也注意到了这个问题,所以到了Delphi7时,换成了Rave报表工具,该工具相比Qreport更易于使用,但如果要做出复杂的报表,仍需对它详细研究

  在做文字处理的时候,中国的大多数用户还是习惯于使用Office,而Office中最常用的莫过于Word因此大多数用户对于Word的操作应该说非常熟悉,而Word在数据录入方面功能之强大确实是无与伦比,在Word中无论简单的文本、表格还是图片等都能很轻松的录入,利用Word本身的打印功能还可以将其作为报表输出的工具

  Delphi+Word的数据库系统设计思路

  结合Delphi和Word本身的特点,数据库系统可以采用这样的设计思路:以Word作为数据录入界面,录入完毕后,数据库系统自动从Word中提取数据,并将提取的各要素存储于数据表中,以便利用数据库系统的强大的数据处理功能对数据表内容进行维护、检索、统计等,并将Word作为报表输出的工具//小新技术网www.xker.com

  Delphi中从Delphi5开始恰恰提供了与Word的接口—TwordApplication,利用该接口可以实现Word的打开、关闭、保存以及对文档内容作相应的处理采用以上的系统设计思想以及Delphi提供的与Word的数据接口,笔者开发了一套成果管理系统该成果管理系统主要内容是管理最终成果文档的内容,包括详细内容、文字图片、成果的储备情况、经费情况、获奖情况等,为了便于统计分析及保证成果内容的一致性,系统将各要素统一存放于数据表相应的字段中下面详细阐述系统的设计思路,参见图1


图1 系统设计思路流程图

  首先筛选必要的成果要素利用Word作一个录入模板Word模板较常见的有两种做法:一种是在Word文档相应的位置插入书签;另一种是在Word文档的相应位置插入特殊符号插入书签的具体做法是:选中要插入书签的区域,在Word的插入菜单中选择书签,填写书签名称,点击添加即可在Word文档中插入特殊符号的思路是:将需要提取的内容用特殊字符包起来,系统利用特殊字符识别要导入的内容,例如#中国#,表示中国是要提取的内容但是利用以上两种模板制作方法都有缺陷,尤其是将模板既作为输出界面,也将其作为录入界面时首先对于利用书签的模板方法,用户在实际录入数据的过程中,很容易将书签误删除插入特殊符号的方法无疑增加了用户录入时的负担,且界面也不美观,没有保持文档原貌但这两种方法的基本思路都一样,即创造要提取要素的特征符号

  借鉴以上两种模板设计方法的成功经验,笔者提出的模版设计思路是:成果的所有要素分门别类存储在Word文档的不同表格中,采用Word表格的具体要素—单元格作为文档内容的识别依据,系统根据Word表格中单元格的索引进行提取但是这种设计思路必须能处理两种情况:一种是每个Word表格对应数据表中的一条记录即单元格数固定的情况;另一种是一个Word表格对应数据表中多行记录即单元格数可变的情况现笔者开发的系统已完全能自如处理这两种情况

  其次是成果文档的导入导入时,一般存在两种情况:一是导入单个成果文档,二是同时导入多个成果文档即文件夹的方式成果文档的导入实际上是Word文档内容的提取问题,提取的关键是成果文档中图片的提取以及成果详细内容的提取,在该系统中图片格式只能为BMP格式对于成果详细内容,由于内容中有可能包括文本框、表格、图片等要素,因此采用了SQL Server中的Ntext类型字段对于图片和详细内容的提取,都采用了剪贴板作为Word数据和数据表数据交换的媒介导入时的另一个问题是单元格内容的判定,即如何判定当前单元格内容是数据表字段所需要的

对于单元格数固定的表格,Word表格的单元格和数据表中的一条记录中的字段是一一对应的,但对于单元格数可变的情况,必须增加单元格内容判定的功能同时导入多个文档时,存在要导入的文档或文件夹中含有其它Word文档的情况,因此必须对欲导入的文档进行身份识别对应前面的模板设计方法,一般的识别方法是识别书签或者识别在文档的某个位置加上的特殊字符但是这两种识别方法的缺陷也是显而易见的,识别标志容易误删除

  但文档识别的基本思路是利用文档模板区别于其他文档的特征加以识别借鉴已有的识别方法的成功经验,笔者提出的文档识别方法是:从成果模板本身的特征出发,用三个限制条件进行判断一是成果文档中共有三个表格,二是成果文档的第一个表格共两行,三是成果文档的第三个表格共两行以上三个限制条件足以保证成果文档的正确识别当然不同的成果模板可以根据其具体特征进行具体分析,这是文档识别的基本思路

  再次是成果文档的导出导出时,依然以Word中的单元格作为识别单位导出时的最常见问题是,对于多记录情况,Word表格应该能根据记录数的多少自动调整行数,且进行单元格的合并和拆分在笔者开发的系统中,该问题也已成功解决另外,从用户角度考虑,系统还实现了导出时将导出文档合一的功能即将多个文档导出为一个文档,大大方便了用户的浏览和编辑

  为了充分发挥Delphi强大的数据管理功能,系统中同时提供了手工维护功能,即以传统的系统界面进行成果的增删改的功能,这样保证了修改内容和导出成果文档的一致性,同时又便于查询和统计

  结论

  Delphi+Word的数据处理方式,可以实现系统的脱机使用,符合系统分布式布署的思想,同时又便于用户熟练掌握,符合系统集成的思想这种全新的数据处理方式在笔者的系统中得到了较好的验证和使用,为以后的数据库系统开发提供了一条新的解决思路采用Word作为数据录入和输出的前端工具的系统设计思路,同样适用于其他语言的数据库系统开发,尤其适用于大量的数据处理的数据库系统

分享到:
评论

相关推荐

    delphi+ word 编程

    结合Word编程,可以实现强大的文档处理和数据交互功能。本教程将深入探讨如何利用Delphi与Microsoft Word进行集成开发,以实现“在Word中直接操纵数据库”的目标。 首先,我们需要了解Delphi中与Office接口交互的...

    delphi_word打印

    在Delphi编程环境中,开发人员经常需要处理与外部应用程序的集成,例如Microsoft Word。本教程将深入探讨如何在Delphi中使用OleContainer组件来打开Word文档并实现打印功能。这个过程涉及到几个关键知识点,包括Ole...

    delphi读取word文档

    在IT行业中,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言,以其高效、易用和跨平台的能力著称。在描述中提到的"delphi读取word文档"是一个常见的需求,尤其是在处理办公自动化或者数据迁移的场景下。本...

    delphi对word编程

    ### Delphi 对 Word 编程知识点详解 #### 一、Delphi 与 Word 的交互原理 在 Delphi 开发环境中,实现与 Microsoft Word 的交互主要依赖于 OLE(Object Linking and Embedding)技术。OLE 技术允许 Delphi 应用...

    delphi7操作word

    而当我们需要在Delphi 7程序中与Microsoft Word交互时,通常会涉及到对Word文档的操作,比如插入文字和表格。本篇文章将深入探讨如何使用Delphi 7来控制Word进行这些操作。 首先,我们需要了解的是,Delphi 7可以...

    DELPHI 2010 调用word

    在使用DELPHI 2010开发应用程序时,有时候我们需要与Microsoft Word进行交互,例如在程序中直接显示Word文档或者对Word文档进行编辑。这个过程通常涉及到COM组件的使用,因为微软提供了OLE自动化接口,使得其他编程...

    wordTOOLS_delphi_delphi替换Word_

    通过对源代码的学习,开发者可以深入了解如何在Delphi中使用COM组件与Office应用程序进行通信,以及如何设计和实现这样的批处理工具,这对提升Delphi编程和办公自动化应用开发技能非常有帮助。 总的来说,...

    delphi中操作word

    在IT行业中,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言,常用于创建高性能的Windows桌面应用程序。在本项目中,我们探讨的是如何使用Delphi来操作Microsoft Word,特别是涉及到在Word文档中插入表格...

    delphi窗体嵌入word

    在Delphi编程环境中,开发人员有时需要将应用程序的窗体(Form)与Microsoft Word文档集成,以便实现诸如编辑...当然,更复杂的操作如宏执行、打印、邮件合并等,都需要进一步研究Word的API和Delphi的ActiveX编程技术。

    DocReplace_打开word_delphi_delphi替换Word_delphi合同_

    在IT行业中,尤其是在文档处理和自动化办公领域,利用编程语言如Delphi进行Word文档操作是一项常见且实用的技术。本文将详细解析"DocReplace_打开word_delphi_delphi替换Word_delphi合同_"这一主题,以及如何利用...

    使用Delphi 7控制Word 2000生成文档的方法.rar_Delphi word2000_delphi 生成word_w

    在压缩包中的`使用Delphi 7控制Word 2000生成文档的方法.txt`文件可能包含了更详细的代码示例或教程,你可以结合这个文本文件进一步学习和实践。而`www.pudn.com.txt`可能是来源或者作者信息,对于这个知识点的学习...

    Delphi读取Word文档

    本篇文章将详细介绍如何在Delphi编程环境中利用Ole自动化技术来读取Word文档的内容。 Delphi是一款强大的Windows应用程序开发工具,它提供了丰富的组件和API接口,使得开发者能够方便地与其他应用程序进行交互。在...

    Delphi7.0 操作word填写表格

    2. Word文档操作,在本例中具体指的是通过Delphi编程语言和OLE(对象链接与嵌入)技术操作Microsoft Word应用程序。OLE技术允许一个程序(客户端)使用另一个程序(服务器)的功能,例如,使用Word组件来创建、读取...

    delphi中提取word内容和图片

    在Delphi编程环境中,我们可以利用COM对象(Component Object Model)技术来操作Microsoft Office应用程序,如Word,从而实现从Word文档中提取内容和图片的功能。在本文中,我们将深入探讨如何在Delphi XE环境下,...

    Delphi操作Word演示

    "Delphi操作Word演示"是一个示例项目,它展示了如何利用Delphi编程环境与Microsoft Word交互,以便进行文档创建、编辑或自动化处理。Delphi是一款强大的Windows应用开发工具,使用Object Pascal语言,而Word则是常用...

    用Delphi实现Word文件的预览

    在IT行业中,开发人员经常需要处理各种文档格式的读取和显示,特别是在Windows环境中,使用Delphi这样的高级编程语言来实现Word文档的预览是一项常见的任务。Delphi是一款强大的RAD(快速应用程序开发)工具,它提供...

    用DELPHI控制WORD的输出

    在IT行业中,有时我们需要在应用程序中集成文档处理功能,例如使用Delphi这样的编程环境来控制Microsoft Word进行文本编辑、格式化或批量处理任务。本文将深入探讨如何利用Delphi实现对Word的控制,并通过实际的代码...

    delphi操纵word和Excel

    在IT行业中,Delphi是一种强大的面向对象的编程环境,它基于Pascal语言并以其高效的编译器和丰富的组件库著称。"delphi操纵word和Excel"这一主题涉及到的是使用Delphi来操作Microsoft Office的两个核心应用:Word和...

    delphi操作word基类

    用delphi编程操作WORD的一个基类,实现了插入表格,图片,文字等常用操作,功能很全面,是学习DELPHI操作WORD很好的例子

Global site tag (gtag.js) - Google Analytics