搜索&在Excel和PowerPoint文档中替换为OLE

时间:2013-07-23 07:25:04

标签: excel delphi delphi-xe2 powerpoint ole

我成功地写了this code来在MSWord文档中执行搜索和替换。现在我也需要为xls,xlsx,ppt和pptx这样做。

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

想象一下,我想用实际的用户名替换字符串“<MY_USER_NAME>"”,如果此字符串在Excel工作表1,2或3或特定的powerpoint页面中,则无关紧要。

我用Google搜索代码,但我发现了一些小实验,是否有人对此有更多经验?

感谢。

1 个答案:

答案 0 :(得分: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;