-
silversmith (11.09.06 13:53) [0]Добрый день, уважаемые коллеги.
Возникла интересная ситуация:
Имеется примерно следующая процедура:
procedure writetodoc(fn:AnsiString);
var
w:olevariant;
i:integer;
begin
w:=CreateOleObject('Word.Application');
w.WordBasic.FileOpen(fn);
for i:=1 to n do begin
// здесь я делаю с файлом что мне нужно.
//Вставляю текст по местоположению закладок в файле.
end;
w.WordBasic.FileSave;
w.WordBasic.FileQuit;
end;
При одиночном вызове данной процедуры все нормально.
А вот когда я в основной программе пишу примерно следующее:
for i:=1 to n do writetodoc(a[i]);
при второй итерации цикла возникает EOleSysError ошибка что-то типа "Выделенный объект отключен". Исключение возникает в строчке
w.WordBasic.FileOpen(fn);
Ну да ладно. Мы не ишем легких путей.
Попытался сделать так:
writetodoc(a[1]);
writetodoc(a[2]);
....
writetodoc(a[n]);
Тупо подряд вызываю процедуры. Вы будете смеятся, но так работает. Умом понимаю, что такого быть не может. Чувствую себя чайником лопоухим.
Как побороть?
Delphi7, MSOffice 2000 -
СвойствоWordBasic
предназначено для совместимости с Word 6.0 и Word for Windows 95. Забудьте о нем.
Если Вы предполагаете обработку нескольких документов, то Word.Application лучше создать вне циклаvar
WordApp: Variant;
{...............................................}
procedure writetodoc(fn:AnsiString, WordApp: variant);
var
doc:olevariant;
i:integer;
begin
WordApp.Documents.Open(Filename:=fn);
for i:=1 to n do begin
// здесь я делаю с файлом что мне нужно.
//Вставляю текст по местоположению закладок в файле.
end;
doc.Save;
doc.close;
doc := Unassigned;
end;
{.........................................}
WordApp := CreateOleObject('Word.Application');
If not VarIsEmpty(WordApp) then
for i:=1 to n do writetodoc(a[i], WordApp);
WordApp.Quit;
WordApp := Unassigned;
-
Удалено модератором
Примечание: Дубль -
silversmith (12.09.06 12:52) [3]Спасибо за совет. Помогло.