![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Взаимодействие ворд+делфи
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 не перемудрил?