Шаг 142.
Автоматизация Microsoft Excel. Работа с ячейками.
Выравнивание текста в ячейке (продолжение)

    На этом шаге мы рассмотрим перенос по словам и автоматическое задание размера шрифта.

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

    Рассмотрим режим переноса по словам. Он включается, когда свойство ячейки WrapText установлено в значение True, и отключается, когда свойство WrapText установлено в значение False.

procedure TForm1.CheckBox1Click(Sender: TObject);
//Включение/отключение переноса по словам
begin
  Range.WrapText:=CheckBox1.Checked;
end;

    Режим переноса по словам позволяет разместить текст, как показано на рисунках 1 и 2.


Рис.1. Текст в ячейке не перенесен по словам


Рис.2. Текст в ячейке перенесен по словам

    В этом режиме высота ячейки автоматически изменяется в зависимости от размера текста. Если текст в ячейке выравнивается по ее левой границе, то можно задать величину отступа, определяемую свойством IndentLevel объекта Range. Оператор Range.IndentLevel=2; задает отступ от левой границы ячейки в два пункта.

    Когда требуется, не изменяя размер ячейки, записать в нее текст, ширина которого может превысить ширину ячейки, необходимо воспользоваться свойством ShrinkToFit. Если установить это свойство в значение True, то размер шрифта текста будет автоматически устанавливаться так, чтобы текст по ширине всегда мог вписаться в ячейку.


Рис.3. Использование свойства ShrinkToFit

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    ComboBox1: TComboBox;
    Label3: TLabel;
    ComboBox2: TComboBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  E:variant;
  Range: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.Edit1Exit(Sender: TObject);
//Определение области
begin
 Range:=E.ActiveSheet.Range[Edit1.Text];
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Задание горизонтального выравнивания
begin
  case ComboBox1.ItemIndex of
    0: Range.HorizontalAlignment:=-4108; //xlHAlignCenter
    1: Range.HorizontalAlignment:=7;     //xlHAlignCenterAcrossSelection
    2: Range.HorizontalAlignment:=-4117; //xlHAlignDistributed
    3: Range.HorizontalAlignment:=5;     //xlHAlignFill
    4: Range.HorizontalAlignment:=1;     //xlHAlignGeneral
    5: Range.HorizontalAlignment:=-4130; //xlHAlignJustify
    6: Range.HorizontalAlignment:=-4131; //xlHAlignLeft
    7: Range.HorizontalAlignment:=-4152; //xlHAlignRight
  end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
//Задание вертикального выравнивания
begin
  case ComboBox2.ItemIndex of
    0: Range.VerticalAlignment:=-4107; //xlHAlignRight
    1: Range.VerticalAlignment:=-4108; //xlVAlignCenter
    2: Range.VerticalAlignment:=-4117; //xlVAlignDistributed
    3: Range.VerticalAlignment:=-4130; //xlVAlignJustify
    4: Range.VerticalAlignment:=-4160; //xlVAlignTop
  end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
//Включение/отключение переноса по словам
begin
  Range.WrapText:=CheckBox1.Checked;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
//Включение/отключение автоподбора ширины
begin
  Range.ShrinkToFit:=CheckBox2.Checked;
end;

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

    На следующем шаге мы продолжим изучение этого вопроса.




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