Delphi FAQ - Как мне работать с файлами MS Word или таблицами MS Excel?

ОГЛАВЛЕНИЕ


Как мне работать с файлами MS Word или таблицами MS Excel?

Воспользоваться функцией CreateOLEObject и работать с VBA (Visual Basic for
Applications) или WordBasic.

NB: Обратите внимание на то, как устанавливаются именованные параметры у
процедур WordBasic'а, например, FileOpen(Name := 'myname.doc');

Пример проверен только на русском Word 7.0! Может, поможет...
unit InWord;
interface
uses
  ... ComCtrls; // Delphi3
  ... OLEAuto;  // Delphi2
[skip]
procedure TPrintForm.MPrintClick(Sender: TObject);
var W: Variant;
    S: String;
begin
  S:=VarToStr(Table1['Num']); file://В D3 без промежуточной записи
                              // в var у меня не пошло :(
  try // А вдруг где ошибка :)
    W:=CreateOleObject('Word.Basic');
    // Создаем документ по шаблону MyWordDot
    // с указанием пути если он не в папке шаблонов Word
    W.FileNew(Template:='C:\MyPath\DB\MyWordDot',NewTemplate:=0);
    // Отключение фоновой печати (на LJ5L без этого был пустой лист)
    W.ToolsOptionsPrint(Background:=0);

    // Переходим к закладке Word'a 'Num'
    W.EditGoto('Num'); W.Insert(S);
    file://Сохранение
    W.FileSaveAs('C:\MayPath\Reports\MyReport')
    W.FilePrint(NumCopies:='2'); // Печать 2-х копий
  finally
    W.ToolsOptionsPrint(Background:=1);
    W:=UnAssigned;
  end;
end;
{.....}
Sergey Arkhipov 2:5054/88.10

Второй путь, более правильный.

Нужно импортировать TLB библиотеку соответствующего COM-сервера (MS Word, MS
Excel, AutoCAD, и т.п.) или воспользоваться готовыми компонентами из палитры
Servers поставляемыми с Delphi 5 и

более свежими версиями. Среда построит unit содержащий описания всех
доступных интерфейсов сервера. Кроме того будут созданы классы-обертки для
некоторых интерфейсов сервера. Преимущество этого метода заключается в том
что компилятор может проверить правильность синтаксиса обращений к серверу,
кроме того повышается скорость работы за счет меньших накладных расходов на
каждое обращение.

Пример использования TLB.
program wordemo;

{$APPTYPE CONSOLE}

uses
  SysUtils, ActiveX, Word2000, OleCtrls, Variants;
var
   W:TWordApplication;
   D:_Document;
   P:Paragraph;
   FileName:OleVariant;
begin
   CoInitialize(NIL);
   try
      // создадим экземпляр объекта-обертки вокруг Word 2000
      W:=TWordApplication.Create(NIL);
      try
         // создадим новый документ на основе шаблона Normal

D:=W.Application.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
         // добавим новый параграф
         P:=D.Paragraphs.Add(EmptyParam);
         // Запишем туда какой-нибудь текст
         P.Range.InsertAfter('Hello Word :-)');
         // сохраним документ
         FileName:='wordemo.doc';

D.SaveAs(FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
            EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
      finally
         // завершим работу Word
         W.Free;
      end;
   finally
      CoUnInitialize;
   end;
end.
Andrew V. Fionik <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>