Delphi 統計Word文檔中的字數

急待解決的問題就是如何用delphi實現word中的統計字數 
另外想多瞭解一些關於操做word的相關內容 
好比用ole動態建立的和TWordApplication的偏重點在哪裏,有什麼不一樣等等……測試

 
用OLE的方法控制Word幾乎和VBA同樣,能夠控制Word的全部功能,缺點是沒有代碼提示,要參照Word的幫助和VBA。ui

用TWordApplication組件的方式有代碼提示,但有不少功能用不了,並且在調用Word的一些方法時,不能省略默認的參數,寫參數寫到手軟。it

Word裏面的字數統計是特殊的內置對話框,用宏是錄製不下來的。io

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裏面的結果仍是不同,並且差的不少word

字數統計裏關於字數的有三項,一是字數,二是字符數(不計空格),三是字符數(計空格)di

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;

就能夠了。

相關文章
相關標籤/搜索