Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно работать с шаблоном Word? 
:(
    Опции темы
Timurrr
Дата 23.2.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



У меня имеется процедура добавления информации с бд в шаблон word

Код

var
 DocName, FN, gp, Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt, Index: OleVariant;
 _Prod, Prod,ConfConv,ReadOnly,AddToRecFiles,replace, FalseParam: OleVariant;
 TrueParam: OleVariant;
 Wrap     : OleVariant;
 i1       : OleVariant; // Temporaly Var <-|
 SP       : OleVariant; //  Save Prompt  <-|
 EP       : OleVariant; //  Empty param  <-|
 i        : integer;
 EmptyParam: OleVariant; // Пустой параметр
 S,S1     : string;

begin
 DocName:=GetProgramPath+'tablc.doc';
 ConfConv:=true;
 ReadOnly:=False;
 AddToRecFiles:=False;
 Psw:='';
 PswTmp:='';
 Revert:=False;
 WritePsw:='False';
 WritePswTmp:='False';
 Fmt:=WdOpenFormatAuto;

 FalseParam:=False;
 TrueParam:=True;
 Wrap:=WdFindContinue;

 WordApplication1.Connect;
 WordApplication1.Documents.OpenOld(DocName, ConfConv, ReadOnly, AddToRecFiles, Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt);
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);

 Replace:=WdReplaceAll;
 Index:=0;

 FN:=InputBox('Сохранение','Введите имя файла:','xXx.doc');

 for i:=1 to WordApplication1.Documents.Count do
  begin
   i1:=i;
   S:=FN;
   if Pos('.',S)<>0
   then S:=Copy(S,1,Pos('.',S));
   S:=S+'doc';
   S1:=WordApplication1.Documents.Item(I1).Name;
   S:=ExtractFileName(S);
   S1:=ExtractFileName(S1);  // усли имена файлов одинаковы
   if UpperCase(S1)=UpperCase(S) then // то файл закрывается
    begin
     WordApplication1.Visible:=True;
     SP:=wdPromptToSaveChanges;
     EP:=wdOriginalDocumentFormat;
     WordApplication1.Documents.Item(i1).Close(SP,EP,EP);
    end;
  end;
 gp:=GetProgramPath+FN; // сохраняем шаблон под именем new_1.doc
 WordDocument1.SaveAs(gp);

////////////////////////// Вставляем в шаблон /////////////////////////////////

     // номер лота
 _Prod:='LabeledEdit1';
 Prod:=labelededit1.Text;
 WordDocument1.Range.Find.ExecuteOld(_Prod, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Prod, replace);

// название лекарства
 _Prod:='Nazvanie';
 Prod:=table1.fieldbyname('Name').AsString;
 WordDocument1.Range.Find.ExecuteOld(_Prod, EmptyParam, EmptyParam, EmptyParam,
     EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Prod, replace);

 WordApplication1.Application.Visible:=True;
 WordApplication1.Disconnect;




не могу разобраться в чем проблема? когда я нажимаю кнопку то просто - напросто программа зависает...помогите разобраться в чем проблема? =) заранее спасибо
PM MAIL   Вверх
Данкинг
Дата 23.2.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



А что именно надо сделать? Честно говоря, вникать в код неохота, могу только посоветовать вместо использования WordApplication1 создавать OLE-объект.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Timurrr
Дата 23.2.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



нужно чтобы выбранная информация с бд вставлялась в щаблон Word...
PM MAIL   Вверх
Данкинг
Дата 23.2.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



В документе у нас есть <шаблон1> и <шаблон2>, куда требуется вставить текст.

Код

uses comobj;
...
var worduk:variant;
...
worduk:=createoleobject('word.application');
worduk.documents.open ('d:\zakaz.doc');
worduk.visible:=false;

worduk.selection.find.text:='<шаблон1>';
if  worduk.selection.find.execute then worduk.selection.text:='нашли шаблон1';
worduk.selection.find.text:='<шаблон2>';
if  worduk.selection.find.execute then worduk.selection.text:='нашли шаблон2';
...
worduk.activedocument.saveas ('d\:zakaz.doc');
worduk.activedocument.close;
worduk.application.quit;
worduk:=unassigned;



Это сообщение отредактировал(а) Данкинг - 23.2.2009, 17:42


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Timurrr
Дата 23.2.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



Цитата(Данкинг @ 23.2.2009,  17:42)
В документе у нас есть <шаблон1> и <шаблон2>, куда требуется вставить текст.

Код

uses comobj;
...
var worduk:variant;
...
worduk:=createoleobject('word.application');
worduk.documents.open ('d:\zakaz.doc');
worduk.visible:=false;

worduk.selection.find.text:='<шаблон1>';
if  worduk.selection.find.execute then worduk.selection.text:='нашли шаблон1';
worduk.selection.find.text:='<шаблон2>';
if  worduk.selection.find.execute then worduk.selection.text:='нашли шаблон2';
...
worduk.activedocument.saveas ('d\:zakaz.doc');
worduk.activedocument.close;
worduk.application.quit;
worduk:=unassigned;

уже работает Спасибо, только заменяет один раз и 1-ое поле...?!?!
PM MAIL   Вверх
Данкинг
Дата 23.2.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(Timurrr @  23.2.2009,  19:51 Найти цитируемый пост)
уже работает Спасибо, только заменяет один раз и 1-ое поле...?!?! 

Вроде да, есть такое глюк: одинаковый шаблон заменяет только единожды, первый встреченный. Ну, цикл сделай, не проблема же.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Timurrr
Дата 23.2.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



Цитата(Данкинг @ 23.2.2009,  19:55)
Цитата(Timurrr @  23.2.2009,  19:51 Найти цитируемый пост)
уже работает Спасибо, только заменяет один раз и 1-ое поле...?!?! 

Вроде да, есть такое глюк: одинаковый шаблон заменяет только единожды, первый встреченный. Ну, цикл сделай, не проблема же.

так и поступлю. спасибо!!!
PM MAIL   Вверх
Данкинг
Дата 23.2.2009, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(Timurrr @  23.2.2009,  20:41 Найти цитируемый пост)
так и поступлю. спасибо!!! 

Пользуйся... smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.