1

我成功编写了这段代码来在 MSWord 文档中执行搜索和替换。现在我也需要为 xls、xlsx、ppt 和 pptx 做这件事。

这个想法是“解析所有文件并找到替换它的每个字符串”。

想象一下,我想<MY_USER_NAME>"用实际的用户名替换字符串 ",而这个字符串是在 Excel 工作表 1、2 或 3 中还是在特定的 powerpoint 页面中都没有关系。

我用谷歌搜索代码,但我只是发现了一些小实验,有没有人有更多的经验?

谢谢。

4

1 回答 1

2

我在我的项目中编写了以下过程,用 Delphi 程序中的 Excel 中的值替换标签。它替换所有工作表上的所有标签

OutF - 是一个 Excel Ole 对象, Slabel - 是要替换的标签, SValue - 是要替换标签的值。

例如

OutF := CreateOleObject('Excel.Application' );
......

ExcelOutStr(OutF,'<MY_USER_NAME>','Value for MY User Name');

这是程序:

procedure ExcelOutStr(OutF:Variant;SLabel,SValue:String);
var i,j:integer;
begin
  try
    OutF.DisplayAlerts := false;

    //To place a string with linebreaks into one Cell
    SValue:=StringReplace(SValue,#13#10,#10,[rfReplaceAll, rfIgnoreCase]);

    for j:=1 to OutF.Sheets.Count do
    begin
       OutF.WorkSheets[j].Select;

       if length(SValue)<250 then
       begin
              OutF.Cells.Replace(What:=Slabel, Replacement:=SValue, LookAt:=2,SearchOrder:=1, MatchCase:=False);
       end
       else
       begin
              //Excel .replace fails on string with length >250 so replace it in few steps
              i:=1;
              while i<=length(SValue) do
              begin
                 if i+200-1<length(SValue) then
                    OutF.Cells.Replace(What:=Slabel, Replacement:=Copy(SValue,i,200)+SLabel, LookAt:=2,SearchOrder:=1, MatchCase:=False)
                 else
                    OutF.Cells.Replace(What:=Slabel, Replacement:=Copy(SValue,i,200), LookAt:=2,SearchOrder:=1, MatchCase:=False);
                 i:=i+200;
              end;
       end;
    end;
    OutF.WorkSheets[1].Select;
  except
      on E : Exception do ShowMessage('Error: Lablel ['+SLabel+'] '+E.Message);
  end;

end;
于 2013-07-23T07:53:51.720 回答