Delphi FAQ - Как мне работать с файлами MS Word или таблицами MS Excel?
ОГЛАВЛЕНИЕ
Страница 60 из 86
Как мне работать с файлами MS Word или таблицами MS Excel?
Воспользоваться функцией CreateOLEObject и работать с VBA (Visual Basic forApplications) или WordBasic.
NB: Обратите внимание на то, как устанавливаются именованные параметры у
процедур WordBasic'а, например, FileOpen(Name := 'myname.doc');
Пример проверен только на русском Word 7.0! Может, поможет...
unit InWord;Sergey Arkhipov 2:5054/88.10
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;
{.....}
Второй путь, более правильный.
Нужно импортировать TLB библиотеку соответствующего COM-сервера (MS Word, MS
Excel, AutoCAD, и т.п.) или воспользоваться готовыми компонентами из палитры
Servers поставляемыми с Delphi 5 и
более свежими версиями. Среда построит unit содержащий описания всех
доступных интерфейсов сервера. Кроме того будут созданы классы-обертки для
некоторых интерфейсов сервера. Преимущество этого метода заключается в том
что компилятор может проверить правильность синтаксиса обращений к серверу,
кроме того повышается скорость работы за счет меньших накладных расходов на
каждое обращение.
Пример использования TLB.
program wordemo;Andrew V. Fionik <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>
{$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.