Конференция "Corba" » Ерунда при работе с Word.Application [Delphi, Windows]
 
  • 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
  • umbra © (11.09.06 16:46) [1]
    Свойство
    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;


  • umbra © (11.09.06 16:47) [2]
    Удалено модератором
    Примечание: Дубль
  • silversmith (12.09.06 12:52) [3]
    Спасибо за совет. Помогло.
 
Конференция "Corba" » Ерунда при работе с Word.Application [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]