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'а. Вот пожалуй и все. Удачного ВАМ кодинга.
