急待解决的问题就是如何用delphi实现word中的统计字数 
另外想多了解一些关于操作word的相关内容 
比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等……

用OLE的方法控制Word几乎和VBA一样,可以控制Word的所有功能,缺点是没有代码提示,要参照Word的帮助和VBA。

用TWordApplication组件的方式有代码提示,但有很多功能用不了,而且在调用Word的一些方法时,不能省略默认的参数,写参数写到手软。

Word里面的字数统计是特殊的内置对话框,用宏是录制不下来的。

var 
    WordApp,WordDoc:OleVariant;

begin 
    WordApp:=CreateOleObject( 'Word.Application '); 
    WordDoc:=WordApp.Documents.Open( 'f:\Test.Doc '); 
    WordApp.Visible:=True; 
    Memo1.Lines.Add( '字数 '+InttoStr(WordDoc.Words.Count)); 
    Memo1.Lines.Add( '字符数(包括空格) '+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count)); 
// 
//   退出Word 
// 
end;

多谢楼上

上面的程序包括空格的统计结果是正确的,但不包含空格的WordDoc.Words.Count跟word里面的结果还是不一样,而且差的很多

字数统计里关于字数的有三项,一是字数,二是字符数(不计空格),三是字符数(计空格)

Memo1.Lines.Add( '字数 '+InttoStr(WordDoc.Words.Count)); 
是对应 "字数统计 "对话框中 "字数 "那一项,即第一项,意思是 "包括空格的字数 ",不是不包括空格.在我机上测试的时候没有问题啊,回头我再试一试.

Memo1.Lines.Add( '字符数(包括空格) '+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count));对应的是第三项,即 "包括空格的字符数 "

至于第二项我也不知道怎么求.如果一定要弄的话,我只有一个笨办法就是每个字符判断是不是空格,计出空格数后再从字符总数中扣了.

退出代码:

WordDoc.Saved:=True;     //不保存文件.如果不保存设Saved为真,否则为假. 
WordDoc.Close; 
WordApp.Quit; 
WordDoc:=Unassigned;

回头试了一下字数那里是有问题

试了很久终于搞定了,呵呵。微软的帮助看来还是有些讲得不清楚。下面是完整的代码。

uses   ComObj;

const 
    wdDialogToolsWordCount   =   $000000E4;

var 
    WordApp,WordDoc,WordDialog:OleVariant;

begin 
    WordApp:=CreateOleObject( 'Word.Application '); 
    WordDoc:=WordApp.Documents.Open( 'E:\Test.Doc '); 
//  WordApp.Visible:=True; 
    WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount); 
    Memo1.Lines.Add( '字数: '+InttoStr(WordDialog.Words)); 
    Memo1.Lines.Add( '字符数(不计空格) '+InttoStr(WordDialog.Characters)); 
    Memo1.Lines.Add( '字符数(计空格) '+InttoStr(WordDialog.CharactersIncludingSpaces)); 
    WordDoc.Saved:=True; 
    WordDoc.Close; 
    WordApp.Quit; 
    WordDialog:=Unassigned; 
    WordDoc:=Unassigned; 
    WordApp:=Unassigned; 
end;

这些结果类的内置对话框好像总要执行一下,否则它的数值就不能保证。

在WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount);的后面加上一句:

WordDialog.Execute;

就可以了。

Delphi 统计Word文档中的字数的更多相关文章

  1. C# 在Word文档中生成条形码

    C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...

  2. C# 提取Word文档中的图片

    C# 提取Word文档中的图片 图片和文字是word文档中两种最常见的对象,在微软word中,如果我们想要提取出一个文档内的图片,只需要右击图片选择另存为然后命名保存就可以了,今天这篇文章主要是实现使 ...

  3. 把word文档中的所有图片导出

    把word文档中的所有图片导出 end

  4. aspose.words复制插入同一word文档中的某个页面

    选择word模板 Document doc = new Document(Server.MapPath("~\\templet") + "\\" + name. ...

  5. Aspose.Words:如何添加另一个WORD文档中的Node对象

    原文:Aspose.Words:如何添加另一个WORD文档中的Node对象 首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾: , true); doc ...

  6. C# 在word文档中复制表格并粘帖到下一页中

    C# 在word文档中复制表格并粘帖到下一页中 object oMissing = System.Reflection.Missing.Value;            Microsoft.Offi ...

  7. 使用Java POI来选择提取Word文档中的表格信息

    通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事 ...

  8. C# Word文档中插入、提取图片,文字替换图片

    Download Files:ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操作.图像会比阅读文字更有吸引力,而且图像是 ...

  9. 处理Word文档中所有修订

    打开现有文档进行编辑 若要打开现有文档,您可以将 Word类实例化,如以下 using 语句所示. 为此,您可以使用Open(String, Boolean) 方法打开具有指定 fileName 的字 ...

随机推荐

  1. Linux下MySQL表名不区分大小写的设置方法

    MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大小写不一致造成的. mysql在window ...

  2. [leetcode] 3. Pascal's Triangle

    第三道还是帕斯卡三角,这个是要求正常输出,题目如下: Given numRows, generate the first numRows of Pascal's triangle. For examp ...

  3. Java之enum

    枚举是 JDK 1.5  中引入的新特性,存放在 java.lang 包中.在没有枚举之前都是直接定义一个final string这种,有了枚举之后可以直接定义啦,不过在java中需要自定义转换,自己 ...

  4. C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表. ...

  5. 当在安卓低版本呈现的界面(H5)出现问题的时候,我们怎么解决?

    昨天,在医院现场的客服人员,向我们反馈一个问题:说一位用户用他的安卓手机打开我们的app之后,界面是乱掉的:如下图: 向客服询问了具体的设备信息:安卓系统版本号是4.2 下意识觉得是因为css的兼容问 ...

  6. 【04】循序渐进学 docker:Dockerfile

    写在前面的话 从前面我们简单的了解了镜像,也运行了容器,各种官方的镜像显然无法满足我们自己的需求,我们目的终究是运行自己的业务. 所以,本章节的 Dockerfile 就主要讲怎么在官方镜像的基础上制 ...

  7. “全栈2019”Java第七十章:静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第十章:关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务

    \PLSQL\instantclient_11_2 listener.ora # listener.ora Network Configuration File: E:\software\PLSQL\ ...

  10. php中数组模拟队列、栈的函数以及数组指针操作

    1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...