Шаг 202.
Автоматизация Microsoft Excel. Печать.
Выбор масштаба

    На этом шаге мы рассмотрим способы установки масштаба документа.

    Выбор нужного масштаба печати позволяет уменьшить количество страниц заданного размера, необходимых для печати документа. Есть два способа задания масштаба.

    Первый основан на задании величины масштаба в процентах от натуральной величины. Свойство Zoom объекта PageSetup позволяет реализовать этот способ. Для этого достаточно записать в него величину масштаба. Обычно масштаб можно задать целым числом в диапазоне от 10 до 400 (%).

    При Zoom=False используется второй способ, основанный на задании максимального количества страниц в ширину (свойство FitToPagesWide) и в высоту (свойство FitToPagesTall) для печатаемого документа.

    Следующие процедуры позволяют реализовать оба способа в приложениях Delphi.

procedure TForm1.Button10Click(Sender: TObject);
//Установка масштаба (первый способ)
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.Zoom:=StrToInt(SpinEdit1.Text);
end;

procedure TForm1.Button11Click(Sender: TObject);
//Установка масштаба (второй способ)
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.Zoom:=False;
  ST.PageSetup.FitToPagesWide:=StrToInt(SpinEdit2.Text);
  ST.PageSetup.FitToPagesTall:=StrToInt(SpinEdit3.Text);
end;

    Результат их выполнения можно увидеть на рисунках 1 и 2. Для правильности выполнения этих процедур мы поступили следующим образом:


Рис.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;
    TabSheet4: TTabSheet;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Button7: TButton;
    Button8: TButton;
    TabSheet5: TTabSheet;
    RadioGroup1: TRadioGroup;
    Label18: TLabel;
    ComboBox2: TComboBox;
    TabSheet6: TTabSheet;
    CheckBox1: TCheckBox;
    Label19: TLabel;
    Edit14: TEdit;
    Button9: TButton;
    TabSheet7: TTabSheet;
    Label20: TLabel;
    SpinEdit1: TSpinEdit;
    Label21: TLabel;
    Button10: TButton;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    Button11: TButton;
    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);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(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;

procedure TForm1.Button7Click(Sender: TObject);
//Установить колонтитулы
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Установить колонтитулы
  ST.PageSetup.CenterHeader:=Edit8.Text;
  ST.PageSetup.RightHeader:=Edit9.Text;
  ST.PageSetup.LeftHeader:=Edit10.Text;
  ST.PageSetup.CenterFooter:=Edit11.Text;
  ST.PageSetup.RightFooter:=Edit12.Text;
  ST.PageSetup.LeftFooter:=Edit13.Text;
end;

procedure TForm1.Button8Click(Sender: TObject);
//Изменение шрифта верхнего центрального колонтитула
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  //Изменение шрифта верхнего центрального колонтитула
  ST.PageSetup.CenterHeader:='&28'+Edit8.Text;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
//Ориентация
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  case RadioGroup1.ItemIndex of
    0: ST.PageSetup.Orientation:=1; //xlPortrait
    1: ST.PageSetup.Orientation:=2; //xlLandscape
  end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
//Размер бумаги
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.PaperSize:=ComboBox2.ItemIndex+1;
end;

procedure TForm1.Button9Click(Sender: TObject);
//Задание номера первой страницы
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  if CheckBox1.Checked then
     ST.PageSetup.FirstPageNumber:=-4105//xlAutomatic
  else
     ST.PageSetup.FirstPageNumber:=StrToInt(Edit14.Text);
end;

procedure TForm1.Button10Click(Sender: TObject);
//Установка масштаба (первый способ)
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.Zoom:=StrToInt(SpinEdit1.Text);
end;

procedure TForm1.Button11Click(Sender: TObject);
//Установка масштаба (второй способ)
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.Zoom:=False;
  ST.PageSetup.FitToPagesWide:=StrToInt(SpinEdit2.Text);
  ST.PageSetup.FitToPagesTall:=StrToInt(SpinEdit3.Text);
end;


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

    На следующем шаге мы рассмотрим печать заголовков строк и столбцов, а также линий сетки.




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