因着要完善WORD附注功能的,对WORD中的查找替换进行了一些深入研究,对编程中测试得到的心得做一个备忘记录。
(1)、全角字会,我用的是AnsiString变量,这样用LENGHT()函数测试出来的是字符数,而不是字节数。
并且copy函数得到的结果也是字符,而不是将全角字符截半成为一个非法字符了。
(2)、对于WORD的替换操作放到了函数,便于长期性的操作。
procedure WordReplaceABCDNUM(wordapp: Variant);
var
bjzm: AnsiString;
idx: Integer;
qjzm: WideString;
a1, a2: string;
begin qjzm := 'ABCD0123456789. ()';
bjzm := 'ABCD0123456789. ()';
for idx := 1 to Length(qjzm) do
begin
WdReplaceWholeStory(wordapp, copy(qjzm, idx, 1), copy(bjzm, idx, 1));
end;
end;
procedure WdReplaceWholeStory(wordapp: Variant; sourceSTR, targetSTR: string);
var
vcontent: variant;
begin
vcontent := wordapp.application.activedocument.content;
vcontent.Find.ClearFormatting;
wordapp.Selection.homeKey(unit := wdStory);
vcontent.Find.Replacement.ClearFormatting;
vcontent.Find.Text := sourceSTR;
vcontent.Find.Replacement.Text := targetSTR;
vcontent.Find.forward := True;
vcontent.Find.Wrap := wdFindContinue;
vcontent.Find.Format := False;
vcontent.Find.MatchCase := False;
vcontent.Find.MatchWholeWord := False;
vcontent.Find.MatchByte := FALSE;
vcontent.Find.MatchWildcards := False;
vcontent.Find.MatchSoundsLike := False;
vcontent.Find.MatchAllWordForms := False;
vcontent.Find.Execute(Replace := wdReplaceAll);
end;