我成功地写了this code来在MSWord文档中执行搜索和替换。现在我也需要为xls,xlsx,ppt和pptx这样做。
这个想法是“解析所有文件,你找到的每个字符串都替换它”。
想象一下,我想用实际的用户名替换字符串“<MY_USER_NAME>"
”,如果此字符串在Excel工作表1,2或3或特定的powerpoint页面中,则无关紧要。
我用Google搜索代码,但我发现了一些小实验,是否有人对此有更多经验?
感谢。
答案 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;