我成功编写了这段代码来在 MSWord 文档中执行搜索和替换。现在我也需要为 xls、xlsx、ppt 和 pptx 做这件事。
这个想法是“解析所有文件并找到替换它的每个字符串”。
想象一下,我想<MY_USER_NAME>"
用实际的用户名替换字符串 ",而这个字符串是在 Excel 工作表 1、2 或 3 中还是在特定的 powerpoint 页面中都没有关系。
我用谷歌搜索代码,但我只是发现了一些小实验,有没有人有更多的经验?
谢谢。
我成功编写了这段代码来在 MSWord 文档中执行搜索和替换。现在我也需要为 xls、xlsx、ppt 和 pptx 做这件事。
这个想法是“解析所有文件并找到替换它的每个字符串”。
想象一下,我想<MY_USER_NAME>"
用实际的用户名替换字符串 ",而这个字符串是在 Excel 工作表 1、2 或 3 中还是在特定的 powerpoint 页面中都没有关系。
我用谷歌搜索代码,但我只是发现了一些小实验,有没有人有更多的经验?
谢谢。
我在我的项目中编写了以下过程,用 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;