Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Взаимодействие ворд+делфи


Oleg_teacher ©   (2011-08-17 10:00:00) 

есть программа взаимодейсвия

в процедуре исполняем код:

if CreateWord and AddDoc then
begin
VisibleWord(True);
....
end
else ShowMessage('Невозможно создать документ')


Сами функции:
Function CreateWord:boolean;
begin
CreateWord:=true;
try
MSWord:=CreateOleObject('Word.Application');
except
CreateWord:=false;
end;
End;
Function VisibleWord (visible:boolean):boolean;
begin
VisibleWord:=true;
try
MSWord.visible:= visible;
except
VisibleWord:=false;
end;
End;
Function AddDoc:boolean;
Var Doc_:variant;
begin
AddDoc:=true;
try
Doc_:=MSWord.Documents;
Doc_.Add;
except
try
MSWord.close(0);
except
end;
AddDoc:=false;
end;
End;


На ОС. win7, Офис: 2007 в некоторых комппах появляется ошибка:
срабатывает ошибка и появляется  окно "Невозможно создать документ". Причина мне кажется в  MSWord:=CreateOleObject('Word.Application');
Что можете сказать по етому поводу? Может ли быть как то связано с политикой безопасности винды, или какие то другие настройки в Офисе? (в хп и 2003 работает безотказно).


OW   (2011-08-18 14:23:00) [1]

procedure CreateWordA(var WA: Variant);
begin
 WA := CreateOleObject('Word.Application');
 WA.DisplayAlerts := False;
 WA.Options.CheckSpellingAsYouType := False;
 WA.Options.CheckGrammarAsYouType := False;
 WA.Options.CheckGrammarWithSpelling := False;
 WA.Options.InlineConversion := False;
 WA.Options.AutoFormatApplyHeadings := False;
 WA.Options.AutoFormatApplyBulletedLists := False;
 WA.Options.AutoFormatApplyOtherParas := False;
 WA.Options.AutoFormatPreserveStyles := False;
 WA.Options.AutoFormatAsYouTypeApplyHeadings := False;
 WA.Options.AutoFormatAsYouTypeApplyTables := False;
 WA.Options.AutoFormatPlainTextWordMail := False;
// еще можно много чего задисаблить, быстрее будет работать. Читать WordXP(2000).pas файл, что именно
end;


OW   (2011-08-18 13:52:00) [2]

if Pointer(IDispatch(MSWord)) <> nil then // аналогично можно документы проверить, не надо ли их Close()
 begin
   try
     MSWord.Quit;
   finally
     MSWord := UnAssigned;
   end;
 end;


oldman   (2011-08-17 10:55:00) [3]

Я фигню советовал!

Башка сегодня не варит. Забыл, как работает try except


Oleg_teacher   (2011-08-17 10:29:00) [4]


> MSWord.close(0);


можно!!! но вдруг не закроется ;) и так вон ошибки вылазят :))


oldman   (2011-08-17 10:24:00) [5]


> Function CreateWord:boolean;
> begin
> CreateWord:=true;
> try
> MSWord:=CreateOleObject('Word.Application');
> except
> CreateWord:=false;
> end;


Ну так значит дело не в MSWord:=CreateOleObject('Word.Application');,
а в CreateWord:=true;
:)


> try
> Doc_:=MSWord.Documents;
> Doc_.Add;
> except
> try
> MSWord.close(0);
> except
> end;
> AddDoc:=false;
> end;


а нельзя

try
Doc_:=MSWord.Documents;
Doc_.Add;
except
MSWord.close(0);
AddDoc:=false;
end;

???


Oleg_teacher   (2011-08-17 10:18:00) [6]


> else ShowMessage('Невозможно CREATEWORD')

тут.

> ЗЫ: в AddDoc ты с try except не перемудрил?

Ворд создан и добавлен док.... значит все ок. Если нет, тогда закрываю сам ворд. Вроде нет. Если что поправите. Может и не надо ето.


oldman   (2011-08-17 10:13:00) [7]


> if CreateWord and AddDoc then
> begin
> VisibleWord(True);
> ....
> end
> else ShowMessage('Невозможно создать документ')


замени на

if CreateWord then
 if AddDoc then begin
   ... \\ твои действия при успехе
   end
 else ShowMessage('Невозможно ADDDOC')
else ShowMessage('Невозможно CREATEWORD')

хоть функцию вычислишь

ЗЫ: в AddDoc ты с try except не перемудрил?


Наверх

Титульная страница Поиск, карта сайта Написать письмо