用C 實現在Word文件中搜尋文字

2021-04-13 01:28:47 字數 1409 閱讀 5302

在word應用程式中搜尋和替換文字是舉手之勞的事情,通過word的物件模型,我們也可以使用程式設計方式來實現。

word的物件模型有比較詳細的幫助文件,放在 office 安裝程式目錄,office 2003是在program files/microsoft office/office11/2052下,文件本身是為vba提供的,在這個目錄下還可以看到所有的office應用程式的vba幫助。

開啟vbawd10.chm,看到word的物件模型,根據以往的使用經驗,很容易在document物件下找到content屬性,該屬性會返回乙個文件文字部分的range物件,從這個物件中不難取到所有的文件內容,再用string的indexof()方法很容易達到目標。

不過,這種做法是很勉強的,對小文件來說,不存在問題,對超長超大的文件來說,這樣的實現方法已經暗埋bug了,而且是程式級的bug,因為正常的測試會很難發現問題,在使用中導致程式出現什麼樣的結果也很難量化描述。

其實,在word中已經提供了可以用作搜尋的物件find,在物件模型上也比較容易找到,對應的說明是這樣的:該物件代表查詢操作的執行條件。find 物件的屬性和方法與「替換」對話方塊中的選項一致。從模型上看,find物件是selection的成員,從示例**來看似乎也是range的成員,查詢range的屬性,果然如此。於是修改上面的**:

wd.content.find.text=strkey;

if (wd.content.find.execute(ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue,ref missingvalue,

ref missingvalue))

else

這樣似乎也不是最好,因為我只要判斷指定的文字是不是在文件中,而不需要知道它出現了幾次,如果有多個要搜尋的文字,難道每次都進行全文件搜尋?假設我要搜尋的文字包含在文件中,最好的情況是在文件開頭就包含我要查詢的文字,最壞的情況是在文件的最後包含要查詢的文字,如果每次取一部分文件進行判斷,符合條件就結束本次搜尋,就可以避免每次搜尋整個文件了。模型中的paragraphs物件現在派上用場了,再修改一下**:

int i=0,icount=0;

word.find wfnd;

if (wd.paragraphs!=null && wd.paragraphs.count>0) }

}

C 中操作Word文件

今天,在用c 語言開發乙個word報表,在網上看到一些有用的文章,先 過來,自己屯著。以下來自 參考 http xb.hzu.edu.cn qikan manage wenzhang 200906014.pdf 在當前專案開發過程中,客戶有根據資料庫資料生成word文件的需求,在和 同事溝通的過程中...

Word2019文件中修訂功能

1 啟用修訂 開啟原始檔案,在 審閱 選項卡下單擊修訂 組中的 修訂 下三角按鈕,在展開的下拉列表中單擊 修訂 選項。2 檢視修訂文字的效果 此時進入修訂狀態,使用者可以參照批註對文件進行修改,刪除和插入的內容均會被標記出來。3 開啟審閱窗格 如果要檢視修訂的內容,可在 修訂 組中單擊 審閱窗格 右...

C 程式設計實現動態生成Word文件

c 程式設計實現動態生成word文件 如何用c 程式設計實現動態生成word文件並填充資料的效果呢?要使用c 操作word,首先要新增引用 1 新增引用 com microsoft word 11.0 object library 2 在.cs檔案中新增 using word 下面的例子中包括c 對...