Шаг 223.
Автоматизация Microsoft Excel. Программирование свойств MS Excel.
Пример программирования панели

    На этом шаге мы рассмотрим пример программирования панели.

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

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Edit5: TEdit;
    Label6: TLabel;
    Edit6: TEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:Variant;
  CB: Variant;
  MSB: 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(ExtractFileDir(application.ExeName)+
         '\Декларация НДС.xlt');
  MessageBox(handle,'Шаблон создан! Переходите к заполнению.',
    'Внимание!',0);
end;

function FindAndReplace(f,r:string):boolean;
var
  range:variant;
begin
  FindAndReplace:=False;
  if  f<>''   then
  begin
    try
      range:=E.Range['A1:EL230'].
         Replace(What:=f,Replacement:=r);
      FindAndReplace:=True;
    except
      FindAndReplace:=False;
    end;
  end;
end;


procedure TForm1.Button3Click(Sender: TObject);
//Заполнение шаблона
const
  msoBarTop=1;
  msoControlButton=1;
  msoBarNoMove=4;
var
   i:integer;
begin
  for i:=1 to E.CommandBars.Count do
    E.CommandBars.Item[i].Enabled:=False;
  // Подставляем текст
  FindAndReplace('#ИНСПЕКЦИЯ&',Edit1.Text);
  FindAndReplace('#ОРГАНИЗАЦИЯ&',Edit2.Text);
  for i:=1 to 12  do
    FindAndReplace('И'+inttostr(i) + '&',Edit4.Text[i]);
  for i:=1 to 9 do
    FindAndReplace('К'+inttostr(i) + '&', Edit5.Text[i]);
  for i:=1 to 15  do
    FindAndReplace('C'+inttostr(i)+ '&', (Edit3.Text+'        ')[i]);
  for i:=1 to 2 do
    FindAndReplace('Д'+inttostr(i)+'&',Edit6.Text[i]);
  for i:=1 to 2 do
    FindAndReplace('М'+inttostr(i)+'&',Edit6.Text[i+3]);
  for i:=1 to 4 do
    FindAndReplace('Г'+inttostr(i)+'&',Edit6.Text[i+6]);
  E.ActiveSheet.Protect(DrawingObjects:=True, Contents:=True,
     Scenarios:=True, Password:='');
  CB:=E.CommandBars.Add('Печать документа',msoBarTop, False,True);
  CB.Enabled:=True;
  CB.Visible:=True;
  CB.Protection:=msoBarNoMove;
  for i:=3 to 4 do
  begin
    try
     MSB:=CB.Controls.Add (Type:=msoControlButton, ID:=IntToStr(i));
     MSB.Caption:='ID='+IntToStr(i);
    except
    end;
  end;
  MessageBox(handle,'Возвращаем панели в исходное состояние!',
    'Внимание!',0);
  for i:=1 to E.CommandBars.Count do
    E.CommandBars.Item[i].Enabled:=True;
end;

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

    Результат формирования декларации приведен на рисунках 1 - 3.


Рис.1. Сообщение после формирования шаблона


Рис.2. Задание значений (панели отключены)


Рис.3. Формирование закончено (панели включены)

    Со следующего шага мы начнем рассматривать создание пользовательских библиотек DLL.




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