Конференция "Начинающим" » Как отловить ошибку/ситуацию и закрыть OLE-MSWord? [D7, 2003]
 
  • ВладОшин © (08.12.17 08:20) [0]
    1. doc файл-шаблон с метками, заменяется на данные и сохраняется на шаре. Программа работает через планировщик, на отдельном компьютере, без человека. Запускается, проверяет задания, делает, закрывается.

    WordApp := CreateOleObject('Word.Application');
    WordApp.DisplayAlerts := False;
    WordDoc := WordApp.Documents.Open(FilePattern);
    ..
    WordDoc.SaveAs(FileSaveAs);

    2. Затем кто-то открывает КонкретныйFileSaveAs (.doc) Вордом и не закрывает Word. Идет на обед.

    3. Следующее сохранение КонкретныйFileSaveAs.doc не выдает ошибку типа "Файл занят" или еще какую
    А программа ждет (возможно, кидала бы окно с сообщением, если "нормально" открывать).
    try
    WordDoc.SaveAs(FileSaveAs);
    except
     не попадает в секцию Except
    И даже когда человек закроет у себя файл - дальше не идет. Надо снимать процесс, прибивать MsWord.

    Вопрос: Как этого не допустить / обойти ?
  • ВладОшин © (08.12.17 09:14) [1]
    Идея  такая
    файл сначала проверить, сделать копию, попробовать удалить
    Если удалился, то сохранить WordDoc.SaveAs(FileSaveAs);

    Но как-то не нравится..
    Опцию бы какую мне ) аля WordApp.Options.Skip_If_Oblom
  • Игорь Шевченко © (08.12.17 10:37) [2]

    > Вопрос: Как этого не допустить / обойти ?


    Запретить обедать, разумеется. От еды все беды.
  • han_malign © (08.12.17 16:18) [3]
    наверняка можно в IStream сериализовать...
  • KilkennyCat © (09.12.17 02:05) [4]
    ну да. нафиг юзать оле, когда формат открыт давно?
  • han_malign © (11.12.17 14:31) [5]

    > ну да. нафиг юзать оле, когда формат открыт давно?

    - OLE уже используется. TStreamAdapter в TMemoryStream - всяко проще, чем покупать компонент который адекватно поддерживает формат...
 
Конференция "Начинающим" » Как отловить ошибку/ситуацию и закрыть OLE-MSWord? [D7, 2003]
Есть новые Нет новых   [118640   +43][b:0][p:0]