Генерация отчетов 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|