Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.04.2014, 13:27
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Ребятушки всем привет, прошу помощи или наставления на путь истинный!
С помощью бубнов я намуил вот такой код который ищет в PP определенный данные( в данном случае имеется только одна ссылка, но их будет много ) и заменяет их на другие.
Код:
var
   ppApp:variant;
   ppPres, ppSlide, ppShape : Variant;
   i, j : integer;
   s : string;
procedure TForm1.Button1Click(Sender: TObject);

procedure FindAndReplace(ppPres: Variant; SearchStr, ReplaceStr: string);
begin
   for i := 1 to ppPres.Slides.Count do
   begin
      ppSlide := ppPres.Slides.Item(i);
      for j := 1 to ppSlide.Shapes.Count do
         begin
            ppShape := ppSlide.Shapes.Item(j);
            s := ppShape.TextFrame.TextRange.Text;
            s := StringReplace(s, SearchStr, ReplaceStr, [rfReplaceAll]);
            ppShape.TextFrame.TextRange.Text := s;
         end;
   end;
end;
   begin
      ppApp:=CreateOleObject('PowerPoint. Application');
      ppPres:= ppApp.Presentations.Open('D:\p.ppt' , False, False, True);
      ppApp.visible:=true;
      FindAndReplace(ppPres, '%сылка%', 'привет');
   end;

end.
Но ни как не получается сделать так, чтобы определенные данные искались в Excel и вставлялись в эти ссылки в PP. Пробовал аналогичным способом, но моих знаний и мастерства не хватило, так как я можно сказать новичок в этих делах. Помогите кто чем может добрые люди!

Ребят вот сам попробовал
Код:
var
 ppApp,exel,ex:variant;
  ppPres,ppSlide,ppShape: Variant;
  i,j: integer;
  s,e: string;
procedure TForm1.Button1Click(Sender: TObject);

procedure FindAndReplace(ppPres: Variant; SearchStr, ReplaceStr: string);

begin
  for i:= 1 to ppPres.Slides.Count do
  begin
    ppSlide:= ppPres.Slides.Item(i);
    for j:= 1 to ppSlide.Shapes.Count do
    begin
      ppShape:= ppSlide.Shapes.Item(j);
      s:= ppShape.TextFrame.TextRange.Text;
      s:= StringReplace(s, SearchStr, ReplaceStr, [rfReplaceAll]);
      ppShape.TextFrame.TextRange.Text:=s;
      end;
  end;
end;
begin
  exel:=CreateOleObject('Excel.Application');
  exel.Workbooks.Open('D:\e.xls');
  exel.visible:=true;

  ppApp:=CreateOleObject('PowerPoint.Application');
  ppPres:= ppApp.Presentations.Open('D:\p.ppt', False, False, True);
  ppApp.visible:=true;  
  e:=exel.Range['a1'];
  FindAndReplace(ppPres, '%ссылка%', e);
end;
end.
но выдает ошибку (прикрепил рисунок) и выделяет " e:=exel.Range['a1'];" эту строку, да и в билде пишет "for loop control variable must be simple local variable" , подскажите в чем дело?
Изображения
Тип файла: jpg Безымянный.jpg (36.8 Кбайт, 3 просмотров)

Последний раз редактировалось M.A.D.M.A.N., 28.04.2014 в 10:13.
Ответить с цитированием
  #2  
Старый 23.04.2014, 10:45
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от meshkale
но выдает ошибку (прикрепил рисунок) и выделяет " e:=exel.Range['a1'];" эту строку,
Здесь нужно из объекта-диапазона (Range) получить значение (Value) вот как-то так:
Код:
e := exel.Range['a1'].Value; // Ещё можно Value2
Цитата:
Сообщение от meshkale
да и в билде пишет "for loop control variable must be simple local variable" , подскажите в чем дело?
Это значит, что переменные для цикла for нужно делать локальными.
Ответить с цитированием
  #3  
Старый 23.04.2014, 10:58
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Здесь нужно из объекта-диапазона (Range) получить значение (Value) вот как-то так:
Код:
e := exel.Range['a1'].Value; // Ещё можно Value2
Это значит, что переменные для цикла for нужно делать локальными.

Поменял переменные, но Value не помогло(
Ответить с цитированием
  #4  
Старый 23.04.2014, 11:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от meshkale
Поменял переменные, но Value не помогло(
У меня вот такой код прекрасно работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  exel: Variant;
  e: String;
begin
  exel := CreateOleObject('Excel.Application');
  exel.Workbooks.Open('D:\e.xls');
  exel.Visible := True;
  e := exel.Range['A1'].Value;
  ShowMessage(e);
  exel.Quit;
end;
Ответить с цитированием
  #5  
Старый 23.04.2014, 11:26
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

у меня тоже прекрасно работает если я работаю с одним екселем (т.е. например копирую одну ячейку в другую но при вставке в ПП получается ошибка. И если работать только с ПП (найти %ссылка% и заменить ее на значение) тоже все работает проблема получается только при совместной работе екселя и ПП.
Ответить с цитированием
  #6  
Старый 23.04.2014, 12:00
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от meshkale
у меня тоже прекрасно работает если я работаю с одним екселем (т.е. например копирую одну ячейку в другую но при вставке в ПП получается ошибка. И если работать только с ПП (найти %ссылка% и заменить ее на значение) тоже все работает проблема получается только при совместной работе екселя и ПП.
Вообще-то речь шла об ошибке в конкретной строке, кстати только что попробовал - Value можно и не указывать (похоже что при позднем связывании это свойство используется по-умолчанию), да и вообще твой исходник из второго поста у меня замечательно работает.
Ответить с цитированием
  #7  
Старый 23.04.2014, 12:13
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Вообще-то речь шла об ошибке в конкретной строке, кстати только что попробовал - Value можно и не указывать (похоже что при позднем связывании это свойство используется по-умолчанию), да и вообще твой исходник из второго поста у меня замечательно работает.
это меня несказанно радует)) только у меня то почему то не работает(
может это сраная винда 8 или МС ОФИС новый ...но раньше то проблем таких особых небыло..

Цитата:
Сообщение от poli-smen
Вообще-то речь шла об ошибке в конкретной строке, кстати только что попробовал - Value можно и не указывать (похоже что при позднем связывании это свойство используется по-умолчанию), да и вообще твой исходник из второго поста у меня замечательно работает.
Т.е он прям из екселя вставляет в ПП вместо ссылки значение ячейки А1?

Последний раз редактировалось M.A.D.M.A.N., 23.04.2014 в 14:09.
Ответить с цитированием
  #8  
Старый 23.04.2014, 12:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от meshkale
Т.е он прям из екселя вставляет в ПП вместо ссылки значение ячейки А1?
Именно так. Я в документе ПП "p.ppt" вставил среди текста строку "%ссылка%" и твой код заменяет эту строку на содержимое ячейки "A1" из экселевского файла "e.xls".
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
meshkale (23.04.2014)
  #9  
Старый 28.04.2014, 09:46
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

poli-smen
А можно тебя попросить архив мне прислать с программой?может я что то не так делаю просто...(
Ответить с цитированием
  #10  
Старый 28.04.2014, 10:33
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от meshkale
poli-smen
А можно тебя попросить архив мне прислать с программой?может я что то не так делаю просто...(
Да ну, что там можно не так делать? Я просто создал новый проект и вставил в него твой код (один в один). Архив с исходником и откомпилированным проектом я выложил здесь: http://gfile.ru/a7pFo
На всякий случай я вложил в архив так же файлы "e.xls" и "p.ppt" на которых я проверял работоспособность исходника.
Ответить с цитированием
  #11  
Старый 28.04.2014, 10:50
meshkale meshkale вне форума
Прохожий
 
Регистрация: 10.04.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Да ну, что там можно не так делать? Я просто создал новый проект и вставил в него твой код (один в один). Архив с исходником и откомпилированным проектом я выложил здесь: http://gfile.ru/a7pFo
На всякий случай я вложил в архив так же файлы "e.xls" и "p.ppt" на которых я проверял работоспособность исходника.
Спасибо! Слушай ка, сейчас пишет " Presentations.Open invalid request. The Power Point frame window does not exist." и ПП не открывает.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:41.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025