Не удается загрузить в поток при событии onquit приложения Word - PullRequest
1 голос
/ 23 августа 2010

Я открываю документ с помощью

WordApplication1.Connect;
WordApplication1.Documents.OpenOld(FileNameOLE,EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApplication1.Visible:=true;

и хочу сохранить его в потоке после его закрытия, но я получаю ошибку ниже.

"Cannot open file used by another process." 

Что делать?Спасибо за помощь.

Образец

procedure TPatient.WordApplication1Quit(Sender: TObject);
  var mem:TMemoryStream;
begin
  WordApplication1.Disconnect;
  WordApplication1.Quit;
  //I get filename to global widestring variable File_OLE
  mem:=Tmemorystream.Create;
  mem.LoadFromFile(File_OLE); -------->>>>error here
  mem.Position:=0;

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

В вашем примере процедуры Word все еще работает, когда вы хотите загрузить документ в ваш TMemoryStream.Word в это время обрабатывает событие quit (см. Рисунок: P) и еще не завершил работу.

Что вы можете сделать, это запустить таймер (TTimer с интервалом 500/1000) для события quitи откройте свой документ в событии таймера.Также не вызывайте WordApplication1.Quit, потому что вы уже выходите, просто отключите WordApplication1.

Еще лучшее решение - не полагаться на событие quit.Потому что, когда вы запускаете Word, как в первом разделе кода, и открываете другой документ Word из проводника Windows, событие quit не произойдет, когда вы закроете документ, открытый приложением.Word по-прежнему остается активным, поскольку на нем также размещается другой документ.

Добавьте TWordDocument к своей форме, а при открытии документа подключите TWordDocument к открытому документу.В событии TWordDocument.Close вы можете запустить таймер, а при его срабатывании вы можете загрузить свой документ.Еще лучший способ - не использовать таймеры, а просто сохранить документ о событии OnClose в другой файл (.SaveAs) и загрузить этот файл в поток памяти.Таким образом, вы можете быть уверены, что файл не открывается Word.

0 голосов
/ 23 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...