Шаг 198.
Автоматизация Microsoft Excel. Печать.
Задание полей страницы

    На этом шаге мы рассмотрим задание полей страницы.

    Используя свойства объекта PageSetup, мы можем задать величину полей печатной страницы, а также положение верхнего и нижнего колонтитулов. Это достигается записью значений этих полей в свойства LeftMargin, RightMargin, TopMargin, BottomMargin, HeaderMargin, FooterMargin. Следующие процедуры позволяют приложению Delphi задать значения этих параметров.

procedure TForm1.Edit2Change(Sender: TObject);
//Задание размеров левого поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров левого поля
  ST.PageSetup.LeftMargin:=StrToInt(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Задание размеров правого поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров правого поля
  ST.PageSetup.RightMargin:=StrToInt(Edit3.Text);
end;

procedure TForm1.Edit4Change(Sender: TObject);
//Задание размеров верхнего поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров верхнего поля
  ST.PageSetup.TopMargin:=StrToInt(Edit4.Text);
end;

procedure TForm1.Edit5Change(Sender: TObject);
//Задание размеров нижнего поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров нижнего поля
  ST.PageSetup.BottomMargin:=StrToInt(Edit5.Text);
end;

procedure TForm1.Edit6Change(Sender: TObject);
//Задание размеров поля верхнего колонтитула
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров поля верхнего колонтитула
  ST.PageSetup.HeaderMargin:=StrToInt(Edit6.Text);
end;

procedure TForm1.Edit7Change(Sender: TObject);
//Задание размеров поля нижнего колонтитула
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров поля нижнего колонтитула
  ST.PageSetup.FooterMargin:=StrToInt(Edit7.Text);
end;

    Результат выполнения этих процедур представлен на рисунке 1 (лист рабочей книги представлен в режиме предварительного просмотра).


Рис.1. Задание полей страницы

    Приведем полный текст приложения.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    ComboBox1: TComboBox;
    OpenDialog1: TOpenDialog;
    Button4: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label2: TLabel;
    ListBox1: TListBox;
    Button5: TButton;
    TabSheet2: TTabSheet;
    Label3: TLabel;
    Edit1: TEdit;
    Button6: TButton;
    TabSheet3: TTabSheet;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure Edit5Change(Sender: TObject);
    procedure Edit6Change(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  ST:variant;

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта Excel и отображение окна
begin
  E:=CreateOleObject('Excel.Application');
  E.Visible:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Создание рабочей книги
begin
  E.WorkBooks.Add;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Открытие рабочей книги
begin
 if OpenDialog1.Execute then
    E.WorkBooks.Open(OpenDialog1.FileName);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Переключение вида документа
begin
  case ComboBox1.ItemIndex of
   0:E.ActiveWindow.View:=1; //xlNormalView;
   1:E.ActiveWindow.View:=2; //xlPageBreakPreview;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Добавление разрывов страницы
var
   i:integer;
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
//Добавление разрывов страницы
  ST.VPageBreaks.Add (Before:=E.ActiveSheet.Cells[10,2]);
  ST.HPageBreaks.Add (Before:=E.ActiveSheet.Cells[10,2]);
  ListBox1.Items.Clear;
  ListBox1.Items.Add('Горизонтальные разрывы');
  for i:=1  to ST.HPageBreaks.Count do
    ListBox1.Items.Add(IntToStr(i));
  ListBox1.Items.Add('Вертикальные разрывы');
  for i:=1  to ST.VPageBreaks.Count do
    ListBox1.Items.Add(IntToStr(i));
  ListBox1.ItemIndex:=0;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Перенос линий разрывов страниц
begin
  ST.HPageBreaks.Item[1].Location:=ST.Range['A5:A5'];
  ST.VPageBreaks.Item[1].Location:=ST.Range['C4:C4'];
end;

procedure TForm1.Button6Click(Sender: TObject);
//Переопределение области печати
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Переопределение области печати
  ST.PageSetup.PrintArea:=Edit1.Text;
end;

procedure TForm1.Edit2Change(Sender: TObject);
//Задание размеров левого поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров левого поля
  ST.PageSetup.LeftMargin:=StrToInt(Edit2.Text);
end;

procedure TForm1.Edit3Change(Sender: TObject);
//Задание размеров правого поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров правого поля
  ST.PageSetup.RightMargin:=StrToInt(Edit3.Text);
end;

procedure TForm1.Edit4Change(Sender: TObject);
//Задание размеров верхнего поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров верхнего поля
  ST.PageSetup.TopMargin:=StrToInt(Edit4.Text);
end;

procedure TForm1.Edit5Change(Sender: TObject);
//Задание размеров нижнего поля
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров нижнего поля
  ST.PageSetup.BottomMargin:=StrToInt(Edit5.Text);
end;

procedure TForm1.Edit6Change(Sender: TObject);
//Задание размеров поля верхнего колонтитула
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров поля верхнего колонтитула
  ST.PageSetup.HeaderMargin:=StrToInt(Edit6.Text);
end;

procedure TForm1.Edit7Change(Sender: TObject);
//Задание размеров поля нижнего колонтитула
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Задание размеров поля нижнего колонтитула
  ST.PageSetup.FooterMargin:=StrToInt(Edit7.Text);
end;

end.
Текст этого приложения можно взять здесь (9,5 Кб).

    В нашем примере величина полей задается в произвольных единицах, т.е. в пикселях. Чтобы привязать все размеры к реальным единицам измерения, нужно выполнить преобразование. Например, в среде Visual Basic такие преобразования выполняют функции InchesToPoints и CentimetersToPoints, преобразующие величину, выраженную в дюймах и сантиметрах, в количество точек. Если эти функции недоступны из приложений Delphi, то используем следующие соотношения - в одной точке 0,035 см или 1/72 дюйма.

    На следующем шаге мы рассмотрим колонтитулы.




Предыдущий шаг Содержание Следующий шаг