• Delphi 操作Word(统计字数)


    急待解决的问题就是如何用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;

    就可以了。

  • 相关阅读:
    解决Enterprise Library January 2006不能加密配置文件的方法
    ASP.NET Ajax 和ASP.NET 2.0 的登陆控件相冲突的问题的讨论
    十二时辰与时间对照表,十二经络时辰表
    对表中数据逐行累加
    SQL脚本 CASE...WHEN...THEN...ELSE...END 的应用
    [转]看刚毕业MM如何在北京买房
    让你的GUI程序随WINDOWS服务一起启动
    启动Oracle,SQL服务,IIS脚本
    无论买新房还是二手房 教你六招可放心收房
    经典开源项目简介及源码下载
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/2140672.html
Copyright © 2020-2023  润新知