word中替换顺序号全半角函数中的体会

因着要完善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;

你可能感兴趣的:(Delphi)