Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Генерация отчетов Word используя библиотеки ComObj в Delphi 7.

Обращение к Word из Delphi с помощью библиотеки ComObj.

Краткое описание.

1. Организация доступа к книге Word.

Для взаимодействия с MS Word в программе необходимо использовать модуль ComObj и объявить переменную для доступа к MS Word вариантного типа.

uses ComObj;

var Word: Variant;

2. Инициализация переменной Word.

Word:= CreateOleObject('Word.Application');

3. Создание новой книги.

Word.Workbooks.Add;

4. Открытие существующей книги (где path - путь к фалу с расширением xls.).

Word.Workbooks.Open[path];

5. Открытие существующей книги только для чтения.

Word.Workbooks.Open[path, 0, True];

6. Закрытие Excel.

Word.ActiveWorkbook.Close;

Word.Application.Quit;

 

 

7. Блокировка запросов (подтверждений, уведомлений) Word.

Word.DisplayAlerts:=False;

8. Отображаем или скрываем Word на экране.

Word.Visible:= True;

Word.Visible:= False;

9. Печать содержимого активного листа Word.

Word.ActiveSheet.PrintOut;

10. Перенос по словам.

Word.Selection.WrapText:=True;

11. Горизонтальное выравнивание.

Word.Selection.HorizontalAlignment:=3;

При присваивании значения 1 используется выравнивание по умолчанию, при 2 - выравнивание слева, 3 - по центру, 4 - справа.

12. Вертикальное выравнивание.

Word.Selection.VerticalAlignment:=1;

Присваиваемые значения аналогичны горизонтальному выравниванию.

13. Граница для ячеек.

Word.Selection.Borders.LineStyle:=1;

При значении 1 границы ячеек рисуются тонкими сплошными линиями. Кроме этого можно указать значения для свойства Borders. Тогда установится только верхняя граница для блока выделения.

Word.Selection.Borders[3].LineStyle:=1;

Значение свойства Borders задает различную комбинацию граней ячеек. В обоих случаях можно использовать значения в диапазоне от 1 до 10.

 

 

14. Использование паролей в Word.

Установка пароля для активной книги может быть произведена следующим образом.

try

// попытка установить пароль

Word.ActiveWorkbook.protect('pass');

except

// действия при неудачной попытке установить пароль

end;

где pass - устанавливаемый пароль на книгу.

Снятие пароля с книги аналогично, используем команду.

Word.ActiveWorkbook.Unprotect('pass');

где pass - пароль, установленный для защиты книги.

Установка и снятие пароля для активного листа книги Excel производится командами:

Word.ActiveSheet.protect('pass'); // установка пароля

Word.ActiveSheet.Unprotect('pass'); // снятие пароля

где pass - пароль, установленный для защиты книги.

15. Вспомогательные операции в Word

Удаление строк со сдвигом вверх (при выполнении данных действий будут удалены строки с 5 по 15).

Word.Rows['5:15'].Select;

Word.Selection.Delete;

Установка закрепления области на активном листе Excel.

// снимаем закрепление области, если оно было задано

Word.ActiveWindow.FreezePanes:=False;

// выделяем нужную ячейку, в данном случае D3

Word.Range['D3'].Select;

// устанавливаем закрепление области

Word.ActiveWindow.FreezePanes:=True;

Результаты работы программы

Рисунок 1 – Главное меню

Рисунок 2 – Форма «Матчи»

Рисунок 3 – Диалог сохранения

Рисунок 4 – Диалог сохранения

Рисунок 9 – Сохраненные данные «Матчи» в Word

Листинг программы

unit Unit6;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ExtCtrls, DBCtrls, Grids, DBGrids, ADODB, Buttons, ComObj, ComCtrls;

type

TForm6 = class(TForm)

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

DataSource1: TDataSource;

Button1: TButton;

SpeedButton1: TSpeedButton;

SaveDialog1: TSaveDialog;

procedure Button1Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form6: TForm6;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm6.Button1Click(Sender: TObject);

begin

close();

end;

procedure TForm6.SpeedButton1Click(Sender: TObject);

const

wdAlignParagraphCenter = 1;

wdAlignParagraphLeft = 0;

wdAlignParagraphRight = 2;

wdLineStyleSingle = 1;

var

wdApp, wdDoc, wdRng, wdTable: Variant;

i, j, Res: Integer;

D: TDateTime;

Bm: TBookMark;

Sd: TSaveDialog;

begin

//{

Sd:= SaveDialog1; //SaveDialog1 уже должен быть на форме.

if Sd.InitialDir = '' then Sd.InitialDir:= ExtractFilePath(ParamStr(0));

//Запуск диалога сохранения файла.

if not Sd.Execute then Exit;

if FileExists(Sd.FileName) then begin

Res:= MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?','Внимание!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);

if Res <> IDYES then Exit;

end;

//Попытка запустить MS Word.

try

wdApp:= CreateOleObject('Word.Application');

except

MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.'

,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);

Exit;

end;

//Делаем видимым окно MS Word. На постоянной основе или на время отладки.

wdApp.Visible:= True;

//Создаём новый документ.

wdDoc:= wdApp.Documents.Add;

//На случай, если очень много данных и wdApp.Visible:= True - тогда

//для ускорения работы отключаем перерисовку окна MS Word.

wdApp.ScreenUpdating:= False;

try

wdRng:= wdDoc.Content; //Диапазон, охватывающий всё содержимое документа.

//Параграф 1. Заголовок отчёта.

//Заголовок отчёта и перевод строки.

wdRng.InsertAfter('Отчёт'#13#10);

//Выравнивание по центру.

wdRng.ParagraphFormat.Alignment:= wdAlignParagraphCenter;

//Параметры шрифта.

wdRng.Font.Name:= 'Times New Roman';

wdRng.Font.Bold:= True;

wdRng.Font.Size:= 14;

//Параграф 2. Общие сведения.

//Формируем диапазон нового параграфа непосредственно за текущим диапазоном.

wdRng.Start:= wdRng.End;

wdRng.InsertAfter(#13#10);

D:= Now;

wdRng.InsertAfter('Дата: ' + FormatDateTime('dd.mm.yyyy', D) + #13#10);

wdRng.InsertAfter('Время: ' + FormatDateTime('hh:nn:ss:zzz', D) + #13#10);

//Сброс параметров параграфа.

wdRng.ParagraphFormat.Reset;

//Выравнивание по левому краю.

wdRng.ParagraphFormat.Alignment:= wdAlignParagraphLeft;

//Отступ слева на 2 сантиметра. Размер отступа задаётся в типографских

//единицах - в пунктах. 1 пункт = 0.035 сантиметра.

//При записи в поле LeftIndent, отступ отсчитывается от левого поля на странице.

//wdRng.ParagraphFormat.LeftIndent:= 2 / 0.035;

//Параметры шрифта.

wdRng.Font.Reset; //Сброс параметров шрифта.

wdRng.Font.Size:= 12;

wdRng.Font.Bold:= True;

//Параграф 3. Заголовок таблицы.

wdRng.Start:= wdRng.End;

wdRng.InsertAfter(#13#10);

wdRng.InsertAfter('Таблица 1. Матчи.'#13#10);

wdRng.ParagraphFormat.Reset;

wdRng.Font.Reset;

wdRng.Font.Size:= 12;

wdRng.Font.Bold:= False;

//Параграф 4. Таблица.

if not ADOQuery1.Active then ADOQuery1.Open;

wdRng.Start:= wdRng.End;

//Добавляем таблицу MS

Word. Пока создаём таблицу с двумя строками.

wdTable:= wdDoc.Tables.Add(wdRng.Characters.Last, 2, ADOQuery1.Fields.Count);

//Параметры линий таблицы.

wdTable.Borders.InsideLineStyle:= wdLineStyleSingle;

wdTable.Borders.OutsideLineStyle:= wdLineStyleSingle;

//Сброс параметров параграфа.

wdRng.ParagraphFormat.Reset;

wdRng.ParagraphFormat.Alignment:= wdAlignParagraphLeft;

wdRng:= wdTable.Rows.Item(1).Range; //Диапазон первой строки.

wdRng.ParagraphFormat.Alignment:= wdAlignParagraphCenter;

wdRng.Font.Size:= 10;

wdRng.Font.Bold:= True;

wdRng:= wdTable.Rows.Item(2).Range; //Диапазон второй строки.

wdRng.ParagraphFormat.Alignment:= wdAlignParagraphLeft;

wdRng.Font.Size:= 10;

wdRng.Font.Bold:= False;

for i:= 0 to ADOQuery1.Fields.Count - 1 do

wdTable.Cell(1, i + 1).Range.Text:= ADOQuery1.Fields[i].DisplayName;

ADOQuery1.DisableControls;

Bm:= ADOQuery1.GetBookMark;

ADOQuery1.First;

i:= 1; //Текущая строка в таблице MS Word.

while not ADOQuery1.Eof do begin

Inc(i);

if i > 2 then wdTable.Rows.Add;

for j:= 0 to ADOQuery1.Fields.Count - 1 do

wdTable.Cell(i, j + 1).Range.Text:= ADOQuery1.Fields[j].AsString;

ADOQuery1.Next;

end;

ADOQuery1.GotoBookMark(Bm);

ADOQuery1.EnableControls;

finally

//Включение перерисовки окна MS Word. В случае, если wdApp.Visible:= True.

wdApp.ScreenUpdating:= True;

end;

wdApp.DisplayAlerts:= False; //Отключаем режим показа предупреждений.

try

wdDoc.SaveAs(FileName:=Sd.FileName); //Запись документа в файл.

finally

wdApp.DisplayAlerts:= True; //Включаем режим показа предупреждений.

end;

//Закрываем документ.

//wdDoc.Close;

//Закрываем MS Word.

//wdApp.Quit;

end;

procedure TForm6.FormCreate(Sender: TObject);

begin

end; end.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...