急待解决的问题就是如何用delphi实现word中的统计字数
另外想多了解一些关于操作word的相关内容
比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等……大号没分了,只好找出尘封已久的马甲(还是为了顶群星闪耀贴注册的,呵呵)

解决方案 »

  1.   

    http://www.yesky.com/401/1700901.shtml
      

  2.   

    http://www.caiblog.com/245/tiger12/56245.shtml
      

  3.   

    procedure TForm2.Button3Click(Sender: TObject);
    var
      ItemIndex :OleVariant;
     FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
     PasswordDocument, PasswordTemplate, Revert,
     WritePasswordDocument, WritePasswordTemplate, Format: OleVariant;
    begin
      WordApplication1.Connect;
      try
        ItemIndex := 1;
        FileName := 'H:\工作报告\下阶段计划.doc';    //参数赋值
     ConfirmConversions := False;
     ReadOnly := False;
     AddToRecentFiles := False;
     PasswordDocument := '';
     PasswordTemplate := '';
     Revert := True;
     WritePasswordDocument := '';
     WritePasswordTemplate := '';
     Format := wdOpenFormatDocument;
       WordApplication1.Documents.Openold( FileName, ConfirmConversions,
       ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
       Revert, WritePasswordDocument, WritePasswordTemplate, Format );    WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
        ShowMessage(INttostr(WordDocument1.Characters.Count));
        ShowMessage(INttostr(WordDocument1.Words.Count));
      finally
        WordApplication1.Disconnect;
      end;
    end;
      

  4.   

    多谢楼上,我试过了,有的文件可以,有的不可以,而且可以的统计出来的数据也跟用word-工具-字数统计的结果对不起来我试过录制宏,可是什么都没录下来有谁知道如何直接调用“字数统计”功能么?
      

  5.   

    用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;
      

  6.   

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

  7.   

    字数统计里关于字数的有三项,一是字数,二是字符数(不计空格),三是字符数(计空格)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;
    WordApp:=Unassigned;
      

  8.   

    试了很久终于搞定了,呵呵。微软的帮助看来还是有些讲得不清楚。下面是完整的代码。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;
      

  9.   

    多谢,我试过了,小文件可以,但是如果文章里面包含过多回车或段落还是会有错误,你可以拷下面的内容到word里试一试:
    1
    11111111
    3333333333 我在3的后面加了个空格,正常应该报19和20(包含空格),但上面的方法就多报了许多
    我也是在试过我要跑的文件后不行才一步步找出来的,小的文件都可以
      

  10.   

    我试了,报的也是19和20啊,没问题。winxp + D7 + office2003
      

  11.   

    我在两台机上试了都没有问题。另一台是winxp+D2005+office2003
    搞不懂为什么在你机上的结果会不同,不知是不是office版本不同的原因。 
      

  12.   

    我的是XP+officeXP
    我在另一台2000+office2000的机器上试也是一样不行,它好像把回车也算进去了你有没有邮箱,我发一个我要跑的正式文件给你
      

  13.   

    [email protected],你把文件发过来我试一下
      

  14.   

    已经发了我在word里看的是11396和14994,用程序跑出来是
    字符数(不计空格)14202
    字符数(计空格)16660
      

  15.   

    这些结果类的内置对话框好像总要执行一下,否则它的数值就不能保证。在WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount);的后面加上一句:  WordDialog.Execute;就可以了。
      

  16.   

    可以了
    Thanks a lot!