Шаг 206.
Автоматизация Microsoft Excel. Печать.
Печать документа

    На этом шаге мы рассмотрим организацию печати документа.

    После настройки и просмотра документа можно перейти к его печати. Печать документа осуществляется методом PrintOut. Синтаксис вызова этого метода:

    PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate);

    Аргументы метода, их тип и назначение представлены в таблице 1.

Таблица 1. Аргументы метода PrintOut
Аргумент Тип Назначение
From Integer Номер страницы, с которой начинается печать
То Integer Номер страницы, на которой заканчивается печать
Copies Integer Количество копий печати
Preview Boolean True - предварительный просмотр перед печатью
ActivePrinter String Имя принтера для печати
PrintToFile Boolean True - печатать в файл
Collate Boolean True - разобрать по копиям

    При использовании метода PrintOut без аргументов печать будет выполнена в режиме "по умолчанию". Этот метод можно использовать с любым набором аргументов. Если в системе установлен не один, а несколько принтеров, то, чтобы использовать один из них, нужно при вызове метода PrintOut задать в аргументе ActivePrinter его имя. Чтобы получить список установленных в системе принтеров, используем стандартный объект Delphi TPrinter (см. следующую процедуру).

procedure TForm1.Button13Click(Sender: TObject);
//Получение списка принтеров, установленных в системе
var i: Integer;
    pr: TPrinter;
begin
    ListBox2.Items.Clear;
    pr:=TPrinter.Create;
    for i:=0 to pr.Printers.Count-1 do
       ListBox2.Items.Add(pr.Printers[i]);
    pr.Free;
end;

    На рисунке 1 представлен компонент TListBox (список) с загруженным перечнем установленных в системе принтеров.


Рис.1. Список установленных в системе принтеров

    Чтобы для печати документа использовать один из принтеров, имя которого находится в списке TListBox, достаточно выполнить следующую процедуру.

procedure TForm1.Button14Click(Sender: TObject);
//Печать
begin
  E.ActivePrinter:=ListBox2.Items.Strings[ListBox2.ItemIndex];
  E.ActiveWorkBook.PrintOut(ActivePrinter:=
       ListBox2.Items.Strings[ListBox2.ItemIndex]);
end;


    Замечание. При выполнении этой процедуры возможны ошибки, связанные с отличием форматов представления имени принтера в объекте TPrinter и имени, используемого при вызове метода PrintOut. Например, если имя принтера для объекта TPrinter представляет собой строку:
    "HP DeskJet 850C on LPT1:",
то при вызове метода PrintOut необходимо использовать несколько видоизмененную строку:
    "HP DeskJet 850C (LPT1:)".

    Вот полный текст приложения.

unit Unit1;

interface

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

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;
    TabSheet8: TTabSheet;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    TabSheet9: TTabSheet;
    Button12: TButton;
    TabSheet10: TTabSheet;
    ListBox2: TListBox;
    Label25: TLabel;
    Button13: TButton;
    Button14: 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);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(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;

procedure TForm1.CheckBox2Click(Sender: TObject);
//Печать заголовков строк и столбцов
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.PrintHeadings:=CheckBox2.Checked;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
//Печать линий сетки
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PageSetup.PrintGridlines:=CheckBox3.Checked;
end;

procedure TForm1.Button12Click(Sender: TObject);
//Переключение первой страницы в режим предварительного просмотра
begin
  //Получение ссылки на 1-й лист рабочей книги
  ST:=E.Sheets.Item[1];
  ST.PrintPreview;
end;

procedure TForm1.Button13Click(Sender: TObject);
//Получение списка принтеров, установленных в системе
var i: Integer;
    pr: TPrinter;
begin
    ListBox2.Items.Clear;
    pr:=TPrinter.Create;
    for i:=0 to pr.Printers.Count-1 do
       ListBox2.Items.Add(pr.Printers[i]);
    pr.Free;
end;

procedure TForm1.Button14Click(Sender: TObject);
//Печать
begin
  E.ActivePrinter:=ListBox2.Items.Strings[ListBox2.ItemIndex];
  E.ActiveWorkBook.PrintOut(ActivePrinter:=
       ListBox2.Items.Strings[ListBox2.ItemIndex]);
end;

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

    Со следующего шага мы начнем изучать программирование свойств MS Excel.




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