急待解決的問題就是如何用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;
就能夠了。