CodeNet / Языки программирования / Delphi & Kylix / Работа с текстом
Экспорт таблиц Paradox в MSWord
Дата: 26 апреля 2008 года
Недавно я прочитал одну статью посвященную экспорту таблиц Paradox в MSWord. Статья вроде бы ничего, но есть одно но, там было описано как вывести только одну конкретную запись из таблицы. Меня это не устраивало (к этому времени я работал над проектом ResCompany) - код на две страницы, а выводит всего лишь одну запись и то надо указать какую. Ну вот очередная пища для "серого вещества" - как сделать так, чтобы вывести все записи таблицы в документ MSWord. Немного помучившись я написал небольшую процедурку автоматизирующую весь процесс экспорта. Ниже приведен код процедуры.
Procedure Export_to_Word (TableName:TTable; WordApp:TWordApplication; WordDoc:TWordDocument); var Coloms, Rows: integer; j, k: integer; i: integer; TableFormat, TableFormat1: OleVariant; ListFields: TStringList; begin TableFormat:=wdTableFormatWeb3; TableFormat1:=wdTableFormatApplyBorders; ListFields:=TStringList.Create; WordApp.Connect; WordApp.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam); WordDoc.ConnectTo(WordApp.ActiveDocument); if not TableName.Active then TableName.Active:=true; with TableName do begin Coloms:=FieldCount; Rows:=RecordCount+1; FieldDefs.GetItemNames(ListFields); end; i:=1; WordDoc.Table.Add(WordDoc.Range, Rows, Coloms, EmptyParam, EmptyParam); WordDoc.Tables.Item(i).Colums.AutoFit; WordDoc.Tables.Item(i).AutoFormat(TableFormat, TableFormat1, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); For j:=0 to Coloms-1 do begin WordDoc.Tables.Item(i).Cell(1, j+1).Range.InsertBefore(ListFields[j]); WordDoc.Tables.Item(i).Cell(1, j+1).Range.Font.Color:=clRed; end; with TableName do begin First; For k:=2 to Rows do begin For j:=0 to Coloms-1 do begin if Fields[j].Value=Null then ShowMessage('Чтобы таблица была экспортирована поля не должны содержать пустые значения' +#13#10+'экспорт не выполнен'); WordDoc.Tables.Item(i).Cell(k,,j+1).Range.InsertBefore(Fields[j].Value); end; Next; end; end; end;
Вот и весь листинг данной процедуры. Пользуйтесь на здоровье. Да кстати, кто заинтересовался в кодинге для приложений MSOffice, те могут прочитать справку по программированию на VBApplication. Именно из такой справки я и узнал как работать с MSWord, ну и другими приложениями подобного типа:)
Еще один момент. При вызове процедуры вам надо передать три параметра:
- Имя экспортируемой таблицы, для этого можно использовать уже подготовленный компонент TTable;
- Компонент WordApplication;
- Компонент WordDocument;
Последние два компонента можно было создать и в самой процедуре, но это уже не важно. Вы можете настроить процедуру под себя, добавить новые возможности, добавить исключения, а также переделать ее так, чтобы она выводила данные таблицы в MSExcel.
Ну и последнее при испытании запустите MSWord, если вы этого не сделаете, тогда вы не увидите результата работы:) и у вас в диспетчере задач будет висеть процесс MSWord'а. Вот пожалуй и все. Удачного ВАМ кодинга.