急待解决的问题就是如何用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. 在APP中集成iAd Banner展示广告盈利

    如果你已经做了一款超牛X的APP.你也许还有一件是需要操心.APP够好了,怎么盈利呢?你可以对下载你的APP的用户收费.也可以完全的免费,然后在APP里放广告来实现盈利.现在来说,除非一款APP真的是 ...

  2. 引用数据数据类型Scanner、Random

    键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包            import java.util.Scanner;  ...

  3. 练习题。对DOM中document的深刻理解巩固

    //window.onload = modTwo;     1.点击单元格内容  弹窗promrt接收值   将接受的值提换单元格内容    2.点击单元格  出现2个按钮 加粗 字体颜色标红     ...

  4. Finding Memory Leaks with SAP Memory Analyzer

    Introduction There is a common understanding that a single snapshot of the java heap is not enough f ...

  5. MySQL查询表内重复记录并删除

    在日常业务场景中,经常会出现一个问题就是解决数据重复的问题,这里用到了一张用户表(s_user)做重复数据操作,分别包含了两个字段,id.name分别用于做唯一标示以及相同姓名的检索. 表结构以及测试 ...

  6. [Lua快速了解一下]Lua的Table

    Lua中的Table其实就是一个Key Value的structure haoel = {name=, handsome=True} -table的CRUD操作 haoel.website=" ...

  7. DATATable转为json

    public static string DataTableToJson(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder() ...

  8. layui与多级联动返填

    <script> layui.use(['form', 'layer'], function () { $ = layui.jquery; var form = layui.form() ...

  9. bzoj1009GT考试

    题目链接 没啥好说的,矩阵优化+$kmp$字符串匹配 上代码: /************************************************************** Prob ...

  10. protobuf高效传输对比json gizp等等

    https://blog.csdn.net/u013929284/article/details/72582215 利用Protocol Buffers可以很好的解决JSON数据在传输方面的不足,它是 ...