2013-07-23 2 views
1

Я успешно написал this code для выполнения поиска и замены в документах MSWord. Теперь мне нужно сделать это для xls, xlsx, ppt и pptx.Поиск и замена OLE в документах Excel и PowerPoint

Идея состоит в том, чтобы проанализировать весь файл, и каждая найденная строка заменит его.

Представьте себе, я хочу, чтобы заменить строку "<MY_USER_NAME>" с действительным именем пользователя, и это не имеет значения, если эта строка в Excel лист 1, 2 или 3, или в конкретной странице Powerpoint.

я гугл для код, но я только что нашел небольшие эксперименты, делает кто имеет больше опыта по этому поводу?

Спасибо.

+2

Для Excel необходимо использовать [ 'Replace'] (http://msdn.microsoft.com/en- us/library/ff194086.aspx) метод 'Range'. Для PowerPoint см. Здесь: http://stackoverflow.com/questions/9811723/find-and-replace-text-in-powerpoint-2010-from-excel-2010-with-vba –

ответ

2

Я написал следующую процедуру в моем проекте, чтобы заменить метки со значениями в Excel из программы Delphi. Он заменяет все теги на всех листах

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; 
+0

спасибо, что попробую – LaBracca

Смежные вопросы