Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

перенос данных из excel в power point   Найти похожие ветки 

 
kossxsasha ©   (2014-04-15 11:34) [0]

Ребята помогите пожалуйста я пишу уже не в один форум но все только читают и ни чего не отвечают.Я подозреваю что тут не так все сложно.С помощью одного хорошего человека я намуил вот такой код который ищет в 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. Пробовал аналогичным способом, но моих знаний и мастерства не хватило, так как я можно сказать новичок в этих делах. Помогите кто чем может добрые люди!


 
brother ©   (2014-04-15 12:03) [1]

а где работа с экселем?


 
kossxsasha ©   (2014-04-15 13:41) [2]

Вот именно, этот код только в РР ищет и заменяет в нем данные а поиск в екселе и вставка в РР у меня не получается. Допустим мы в екселе ищем  слово "привет" и заменяем в РР ссылку " %сылка%" на привет. Как это намутить я незнаю, аналогичный способ не работает у меня ведь я новичок.


 
brother ©   (2014-04-15 13:44) [3]

> Как это намутить

удачи!


 
kossxsasha ©   (2014-04-15 13:46) [4]

Спасибо за наилучший совет в моей жизни!


 
brother ©   (2014-04-15 14:14) [5]

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


 
kilkennycat ©   (2014-04-15 14:21) [6]

http://nech.tamb.ru/pages/delphi_excel.htm


 
kossxsasha ©   (2014-04-15 15:41) [7]

Причем тут прямой код, можно было подсказать хотя бы направление в решении проблемы. В моем понимании мы создаем функцию поиска в екселе находим запоминаем далее работает поиск в РР находим эту ссылку и заменяем ее на то что нашли в екселе, но если я не знаю как это мне организовать, именно поэтому я в разделе помощь новичкам


 
junglecat   (2014-04-15 15:49) [8]

> Причем тут прямой код

а нужен был кривой код?)

концептуально поиск по книге экселя мало чем отличается от поиска по коллекциям поверпоинта. Названия объектов только разные, да и то не всегда


 
kossxsasha ©   (2014-04-15 15:56) [9]

> Причем тут прямой код

>а нужен был кривой код?)

нет просто я так понял что мне сказали что я такой то лентяй сам не хочу сделать мол здесь тему создал чтоб за меня все сделали..
как фунуцию поиска в екселе сделать это я разберусь я не понимаю только как мне найти там и запомнить потом найти тут и заменить на то что я нашел там, этак какая то функция в функции чтоли получается...


 
junglecat   (2014-04-15 16:04) [10]

> как мне найти там и запомнить потом найти тут и заменить
> на то что я нашел там

Data := ReadFromExcel();
WriteToPowerPoint(Data);


 
kossxsasha ©   (2014-04-15 16:06) [11]

kilkennycat ©   (15.04.14 14:21) [6]
http://nech.tamb.ru/pages/delphi_excel.htm

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


 
kossxsasha ©   (2014-04-15 16:07) [12]

> как мне найти там и запомнить потом найти тут и заменить
> на то что я нашел там

Data := ReadFromExcel();
WriteToPowerPoint(Data);

спасибо это можно сказать единственное что я путное видел!


 
Inovet ©   (2014-04-15 16:09) [13]

> [10] junglecat   (15.04.14 16:04)
> Data := ReadFromExcel();
> WriteToPowerPoint(Data);

В вопросе что-то про ссылки. Это типа поменяли в Ексел и тут же видим изменения в Пауерпоинт?


 
kossxsasha ©   (2014-04-15 16:12) [14]

нет нет ссылка это типо закладка в РР (%сылка%) мы просто ищем в екселе слово "привет" и вставляем его в РР вместо  "%сылка%".


 
Inovet ©   (2014-04-15 16:13) [15]

> [12] kossxsasha ©   (15.04.14 16:07)
> спасибо это можно сказать единственное что я путное видел!

Тоже самое

> [9] kossxsasha ©   (15.04.14 15:56)
> этак какая то функция в функции чтоли получается...

Как будто такого не бывает, хоть 100500, только читать плохо. Это при том, что "я знаю как работать с екселем через делфи". Как-то сомнения возникают в истинности утверждения

WriteToPowerPoint(ReadFromExcel());


 
kossxsasha ©   (2014-04-15 16:18) [16]

FindAndReplace(ppPres, "%сылка%", "РЕЗУЛЬТАТ ПОИСКА В ЕКСЕЛЕ");

вот что то вроди этого как мне сделать ?


 
Inovet ©   (2014-04-15 16:26) [17]

Вот это "РЕЗУЛЬТАТ ПОИСКА В ЕКСЕЛЕ" где? "я знаю как работать с екселем через делфи".


 
kossxsasha ©   (2014-04-15 16:32) [18]

хорошо будет вам то что вы просите.


 
kilkennycat ©   (2014-04-15 17:20) [19]


> как мне в одной функции вывести результат поиска в другой

это означает полное незнание программирования (неважно даже язык и среда).
отсутствие базовых понятий.
помочь бесплатно не представляется возможным.


 
KilkennyCat ©   (2014-04-15 17:25) [20]


> хорошо будет вам то что вы просите.

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


 
Dennis I. Komarov ©   (2014-04-15 22:57) [21]


> kossxsasha ©

Попробую объяснить:
Дело в том, что работа из Delphi (врочем даже не важно) с Excel и PowerPoint одинакова, вернее через тот же интерфейс. Заявление

> я знаю как работать с екселем через делфи у меня проблема
> в том что я не знаю как мне воспользоваться делфи как промежуточной
> программой между екселем и РР, как мне в одной функции вывести
> результат поиска в другой

противоречит смыслу, ибо Вы не знаете (возможно откопали где-то на просторах, но НЕ ЗНАЕТЕ)
Отсюда получилось [5], и пока Вы этого не осознаете, дальше будет трудно...

Сложно судить о необходимости "промежуточного звена" ибо PP умеет работать с данными (наверно с 2007, может и ранее)


 
kossxsasha ©   (2014-04-16 13:40) [22]

Вот для чего такие форумы создаются? Я от вас не попросил написать мне код! Если я не понимаю  в программировании это не значит что я не могу что то пробовать свое,  с кодом мне помогли но ни откуда я не сливал его! Поэтому я всего лишь попросил наставить на путь дабы не писать (> как мне в одной функции вывести результат поиска в другой)вот такие глупости так как я знаю что это глупость но если до меня не допрет и поэтому и пишу в  раздел НАЧИНАЮЩИМ и как я понимаю это вообще ни на что не влияет если тут сидят люди которые только и могут написать что  я не смыслю в программировании все сливаю и прошу за меня код написать тратите только свое и мое время если нет у вас желания помочь ( не код написать а подсказать как можно реализовать ) то зачем мне отвечать тогда? сидите в контакте и там трольте всякие посты!

PS   >Inovet я отвечу Вам позже просто на работе завал..


 
kossxsasha ©   (2014-04-16 13:43) [23]

> Komarov ©
связующее звено делфи мне необходимо по определенным причинам, я пробовал реализовать мою задачи стандартными средствами MS Office но это не то что хотелось бы..


 
Ega23 ©   (2014-04-16 14:00) [24]

Не получается читать без знаков препинания. А раз не получается, то потом не хочется. А раз не хочется, то и не буду.


 
brother ©   (2014-04-16 14:17) [25]

> сидите в контакте и там трольте всякие посты!

для нас это он и есть... но, Вы не поняли главного: мы хотим, чтобы Вы поняли суть своей проблеммы и тогда решение будет очевидным...


 
kossxsasha ©   (2014-04-16 14:17) [26]

>Ega23 ©
Еще один шутник? Спешал фор ю
Вот для чего такие форумы создаются? Я от вас не попросил написать мне код! Если я не понимаю  в программировании-это не значит, что я не могу что то пробовать свое,  с кодом мне помогли, но ни откуда я не сливал его! Поэтому я всего лишь попросил наставить на путь дабы не писать (> как мне в одной функции вывести результат поиска в другой)вот такие глупости, так как я знаю что это глупость, но если до меня не допрет, поэтому и пишу в  раздел НАЧИНАЮЩИМ и как я понимаю это вообще ни на что не влияет, если тут сидят люди которые только и могут написать, что я не смыслю в программировании, все сливаю и прошу за меня код написать. Тратите только свое и мое время, если нет у вас желания помочь ( не код написать, а подсказать как можно реализовать ) то зачем мне отвечать тогда? сидите в контакте и там трольте всякие посты!


 
kossxsasha ©   (2014-04-16 14:21) [27]

>brother ©
для нас это он и есть... но, Вы не поняли главного: мы хотим, чтобы Вы поняли суть своей проблеммы и тогда решение будет очевидным...

Подскажите пожалуйста каким образом мне помогают понять суть проблемы? Словами "да ты ни чего не смыслишь в программировании"  или " полюбому код слил теперь сидит тут просит чтоб все сделали" ?


 
kossxsasha ©   (2014-04-16 14:24) [28]

>brother ©
для нас это он и есть...
Вот именно Вы так к этому и относитесь, на других форумах я такого еще не встречал, там на мой взгляд люди которые хотят помочь человеку разобраться в его проблеме, а не как в контакте посидеть потролить НАЧИНАЮЩЕГО. Тоже самое, что учитель будет ржать над первоклассниками говоря какие они тупые.


 
brother ©   (2014-04-16 14:30) [29]

читаем [6], делаемс вывод: работа с s:=Excel.Range["b2"]; для Вас понятна и проста...
читаем [11] и думаем, почему не понятно как делать, что именно не получается, где ВАШ нерабочий код для разбора ошибок?
зы. Вы ничего нам не показываете из своих попыток, но настойчиво утверждаете, что все знаете...
ззы. Чего именно Вы хотите от данного сообщества? (надеюсь, опять же, не кода?)


 
brother ©   (2014-04-16 14:32) [30]

> посидеть потролить НАЧИНАЮЩЕГО

ничего подобного! здесь, по сравнению с другими форумами, немного другой подход к вопрошающему, который может восприниматься как надменность и зазнайство, но уверяю Вас: ЭТО НЕ ТАК!
Четко формулируйте вопрос - будет четкий ответ.


 
kossxsasha ©   (2014-04-16 14:48) [31]

brother ©   (16.04.14 14:32) [30]
> посидеть потролить НАЧИНАЮЩЕГО

ничего подобного! здесь, по сравнению с другими форумами, немного другой подход к вопрошающему, который может восприниматься как надменность и зазнайство, но уверяю Вас: ЭТО НЕ ТАК!
Четко формулируйте вопрос - будет четкий ответ.

Я очень надеюсь на это, просто поймите я сам люблю помогать людям  чем могу , дайте мне времени я вам предоставлю свои нерабочие попытки, просто сегодня на работе завал, единственное чего я опасаюсь, так это того что после предоставления моих попыток опять начнется "да ты ни чего не смыслишь" без помощи направления на путь решения..


 
brother ©   (2014-04-16 14:56) [32]

не надо бояться! показывайте, будем смотреть...


 
kossxsasha ©   (2014-04-16 14:59) [33]

>brother ©  
не надо бояться! показывайте, будем смотреть...

Спасибо!


 
kossxsasha ©   (2014-04-21 14:14) [34]

Как и обещал, сегодня немного посидел с Delphi и вот что вышло..

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.


 
brother ©   (2014-04-21 14:21) [35]

теперь вопросы...


 
kossxsasha ©   (2014-04-21 14:29) [36]

Вопрос в том что FindAndReplace(ppPres, "%сылка%", e); не работает, получалось только то что я из одной ячейки копировал в другую, а  заменить %сылка% на то что в ячейке а1 н получается..(


 
junglecat   (2014-04-21 14:45) [37]

а там реально должно быть "сылка", с одной "с"?


 
kossxsasha ©   (2014-04-21 14:57) [38]

и вправду по своей глупости там должно быть две с,но теперь почему то у меня вылазиет ошибка, хотя раньше все было нормально, " project project1.exe raised exception class eoleexception with message Вызов был отклонен Process stopped Use step or run to contine" и выделяет e:=exel.Range["a1"]; эту строку..


 
junglecat   (2014-04-21 15:01) [39]

в конце неплохо бы делать exel.Quit; exel := Unassigned;
то же и для ppApp


 
kossxsasha ©   (2014-04-21 15:10) [40]

>junglecat
Спасибо я хотел сделать это позже когда заработает копирование)


 
kossxsasha ©   (2014-04-22 11:22) [41]

Ребят ну что подскажите что с ошибкой делать?


 
junglecat   (2014-04-22 11:49) [42]

хз, что у тебя там с экселем. Возможно, книга просто защищена от записи, либо завис процесс экселевский


 
kossxsasha ©   (2014-04-23 08:33) [43]

еще в билде пишет "for loop control variable must be simple local variable" , может это поможет..


 
KilkennyCat ©   (2014-04-23 09:14) [44]

нет, это означает, что для циклов рекомендуется объявлять счетчик локально, т.е. внутри функции:

ppApp:variant;
ppPres, ppSlide, ppShape : Variant;
i, j : integer; // здесь некорректно
s : string;
procedure TForm1.Button1Click(Sender: TObject);

procedure FindAndReplace(ppPres: Variant; SearchStr, ReplaceStr: string);
var i : integer; // здесь корректно
begin
for i := 1 to ppPres.Slides.Count do


 
kossxsasha ©   (2014-04-23 10:16) [45]

>KilkennyCat
Спасибо! Только вот самой главной проблемы это не решило(


 
brother ©   (2014-04-23 10:36) [46]

> Вызов был отклонен

1. поробуйте выполнить exe от имени администратора.
2.
> "%сылка%"

заменить на %LINK% в программе и в пп.


 
brother ©   (2014-04-23 10:37) [47]

> %LINK%

те %LINK1%


 
kossxsasha ©   (2014-04-23 10:51) [48]

Все сделал не помогло..(


 
kossxsasha ©   (2014-04-23 10:53) [49]

А такой вопрос, если у меня %link% находится в надписи это ни на что не влияет?


 
brother ©   (2014-04-23 11:13) [50]

> в надписи

это что?
именно [47] делали с заменой в exe и в презентации?


 
kossxsasha ©   (2014-04-23 11:21) [51]

>> в надписи

это что?
именно [47] делали с заменой в exe и в презентации?
Вставка-надпись в нее пишу %Link%, так точно и там и там менял..


 
brother ©   (2014-04-23 11:43) [52]

1. В видимо читаете через раз? я специально указал %LINK1%, дабы не перепутать с другими %LINK%.
2. Но это не критично, ведь AV все еще есть?


 
brother ©   (2014-04-23 11:45) [53]

выполните В НОВОМ проекте
exel:=CreateOleObject("Excel.Application");
exel.Workbooks.Open("D:\e.xls");
exel.visible:=true;
e:=exel.Range["a1"];
sleep(1);


до sleep исполнение доходит? чему равна переменная e ?


 
kossxsasha ©   (2014-04-23 11:58) [54]

Сделал так
<CODEexel:=CreateOleObject("Excel.Application");
exel.Workbooks.Open("D:\e.xls");
exel.visible:=true;
e:=exel.Range["a1"];
ShowMessage(e);
sleep(1);>
в ответ выводит 222 так же как и в документе.
Как узнать что код дошел до sleep?
Проблема в том, что при работе только с ПП (поиск и замена %LINK1% все работает) также и с екселем, но когда я пытаюсь из экселя достать эти "222" и вставить в %LINK1% то появляется проблема.


 
kossxsasha ©   (2014-04-23 11:58) [55]

извиняюсь за косяк с кодом


 
brother ©   (2014-04-23 12:01) [56]

вот так у меня прекрасно работает...

procedure TForm1.Button1Click(Sender: TObject);
var
 excel: variant;
 e: string;
begin
excel:=CreateOleObject("Excel.Application");
excel.Workbooks.Open("c:\test\1.xls");
//excel.visible:=true;
e:=excel.Range["a1"];
showmessage(e);
excel.quit;
end;


 
brother ©   (2014-04-23 12:02) [57]

а, еще раз выложите последний код, что вы пробуете сейчас...


 
kossxsasha ©   (2014-04-23 12:08) [58]

вот еще что только что заметил... если я делаю так
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, "%LINK1%", "e");

end;

end.
то в ПП ЛИНК меняется на просто "е" но про это показывает ошибку
"указанное значение выходит за допустимые пределы" и выделяет
s:= ppShape.TextFrame.TextRange.Text; эту строку, обе переменные s и e обозначены string  может тут какая то проблема?


 
kossxsasha ©   (2014-04-23 12:10) [59]

>brother ©   (23.04.14 12:01) [56]
вот так у меня прекрасно работает...

procedure TForm1.Button1Click(Sender: TObject);
var
excel: variant;
e: string;
begin
excel:=CreateOleObject("Excel.Application");
excel.Workbooks.Open("c:\test\1.xls");
//excel.visible:=true;
e:=excel.Range["a1"];
showmessage(e);
excel.quit;
end;
у меня тоже, я же говорю по отдельности что ексель что ПП прекрасно работают, по крайней мере ПП работал..


 
kossxsasha ©   (2014-04-23 12:25) [60]

только что на другом форуме ответили, что мой код полностью работоспособен!  делаю вывод- виндовс 8 и новый МС ворд не лучшее средство работы с делфи...


 
junglecat   (2014-04-23 12:57) [61]

> "указанное значение выходит за допустимые пределы" и выделяет
>
> s:= ppShape.TextFrame.TextRange.Text

а никаких параметров не надо для задания этого textrange?


 
kossxsasha ©   (2014-04-23 13:15) [62]

>а никаких параметров не надо для задания этого textrange?
Дело в том что до этого все работало идеально, незнаю что потом случилось но стал выделять эту строку..


 
brother ©   (2014-04-23 15:48) [63]

> до этого все работало идеально

это когда? финальный код же тут появился?


 
kossxsasha ©   (2014-04-23 16:30) [64]

это когда я тему создал.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.053 c
15-1418160605
Юрий
2014-12-10 00:30
2015.09.10
С днем рождения ! 10 декабря 2014 среда


2-1395501135
Роман
2014-03-22 19:12
2015.09.10
проблема с bitmap:=bitmap0;


15-1414158286
Дмитрий С
2014-10-24 17:44
2015.09.10
Удаление SpeedChecker


2-1396356964
Дмитрий
2014-04-01 16:56
2015.09.10
0,1 is not a valid BCD value


15-1420313485
alexdn
2015-01-03 22:31
2015.09.10
Конвертер php в delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский