0
我有以下函數,它應該返回我正在搜索的文本的第一個出現的位置。 問題:在OLE的Word文檔中查找不起作用
- 返回-1
- 拋出AV-S,當我使用整個文檔內容爲一個範圍(或使用與所述文檔內容的邊界的範圍)
我做了什麼:
- 大量的谷歌搜索,找到問題的根源,或替代該代碼
- MSDN挖
- 試驗和錯誤
下面是代碼:
function FindTextWord(wordApp: TWordApplication; afindText: OleVariant; startIndex, endIndex: Integer; findEndOffsetFast: Boolean): Integer;
var
matchCase : OleVariant;
matchWholeWord : OleVariant;
matchWildcards : OleVariant;
matchSoundsLike : OleVariant;
matchAllWordForms: OleVariant;
fWd : OleVariant;
wrap : OleVariant;
format : OleVariant;
replaceWith : OleVariant;
replace : OleVariant;
myRange : Range;
startSearchOffset: OleVariant;
endSearchOffset : OleVariant;
begin
WordApp.Selection.Start := 0;
WordApp.Selection.End_ := 0;
result:=-1;
try
if (Assigned(WordApp)) then
begin
if (startIndex<1) then
begin
WordApp.ActiveDocument.GrammarChecked:=true;
WordApp.ActiveDocument.SpellingChecked:=true;
WordApp.ActiveDocument.ShowGrammaticalErrors:=false;
WordApp.ActiveDocument.ShowSpellingErrors:=false;
startSearchOffset:=WordApp.ActiveDocument.Content.Start;
end else
begin
startSearchOffset:=startIndex;
end;
if (endIndex<1) then
begin
if (findEndOffsetFast)or(startIndex<1) then
begin
endSearchOffset:=WordApp.ActiveDocument.Content.End_;
end else
begin
endSearchOffset:=startSearchOffset+1;
WordApp.Selection.Start:=startSearchOffset;
while (WordApp.Selection.Start=startSearchOffset)and(endSearchOffset<WordApp.ActiveDocument.Content.End_)and(endSearchOffset-startSearchOffset<4000) do
begin
endSearchOffset:=endSearchOffset+1;
WordApp.Selection.End_:=endSearchOffset;
end;
endSearchOffset:=endSearchOffset-1-Length(afindText);
end;
end else
begin
endSearchOffset:=endIndex;
end;
myRange:=WordApp.ActiveDocument.Range(startSearchOffset,endSearchOffset);
myRange.Find.ClearFormatting;
myRange.Start:=Integer(startSearchOffset);
myRange.End_:=Integer(endSearchOffset);
MatchCase := False;
MatchWholeWord := TRUE;
MatchWildcards := False;
MatchSoundsLike := False;
MatchAllWordForms := False;
fWd := True;
Wrap := wdFindStop;
Format := False;
ReplaceWith := '';
Replace := wdReplaceNone;
if MyRange.Find.Execute(aFindText,MatchCase,MatchWholeWord,
MatchWildcards,MatchSoundsLike,
MatchAllWordForms,fWd,
Wrap,Format,ReplaceWith,Replace)
then begin
if (myRange.Start>=startSearchOffset) then
begin
if (myRange.Find.Found) then
begin
result:=myRange.Start;
end;
end else
begin
result:=FindTextWord(wordApp,afindText,startIndex,endIndex,false);
end;
end;
end;
except
end;
end;
更新
問題不替換文本(我必須消除可能出現在所有的HTML標籤在word文檔中,但有以下幾點:如果我遇到格式化標籤,比如b,i,u,s,strong等,我必須刪除它們並相應地設置文本格式)
這個問題與「替換」文本無關,這就是你的代碼片斷所做的。它也缺少'vE'的聲明。 –
+1 Ken, 問題不在於替換文本(我必須刪除可能出現在word文檔中的所有HTML標籤,但是以下轉折:如果我遇到格式標籤,例如b,i,u,s,強壯等等,我必須刪除它們並相應地設置文本格式) – beerwin