Суперфункции

EXCEL. Часть 3

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


Выбор шрифта

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

Рассмотрим в деталях объект Font и его поля. Объект Font является свойством ячейки или области ячеек Range, а доступ к нему получаем, используя следующий оператор: E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font, где E = Excel.Application. Объект Font имеет несколько полей, которые влияют на режим отображения символов ячейки. Name - наименование шрифта в формате string. В это поле записывается имя одного из шрифтов, установленного в системе. Bold - параметр, который может принимать значение True или False и который влияет на толщину символов. Italic - принимает значение True (наклонный) или False (прямой) и отвечает за наклонное написание символов. Strikethrough - равен True, если символы перечеркнутые, или False, если не перечеркнутые. Underline - свойство, которое определяет стиль подчеркивания, имеет тип Integer. Когда Underline=xlUnderlineStyleNone, символы отображаются без подчеркивания, если Underline=xlUnderlineStyleSingle, то используется обычное подчеркивание. Когда необходимо использовать дополнительные виды подчеркивания, то применяем определенные константы (смотрите приложение на домашней странице). Color - цвет символов, тип longint.

Нетрудно провести соответствие между описанием полей объекта Font ячеек Excel и объектом Tfont Delphi. Ниже описанная функция использует это соответствие для задания шрифта ячеек таблиц Excel из приложений Delphi. Последним аргументом этой функции является ссылка на объект Font:Tfont, который является стандартным типом объекта Delphi. Этот аргумент мы используем для передачи параметров шрифта в Excel.

Function SetFontRange(sheet:variant;range:string;
 font:Tfont):boolean;
begin
 SetFontRange:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Name:=font.Name;
  if fsBold in font.Style then E.ActiveWorkbook.Sheets.Item
    [sheet].Range[range].Font.Bold:=True
   else E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Font.Bold:=False;
  if fsItalic in font.Style then E.ActiveWorkbook.Sheets.Item
    [sheet].Range[range].Font.Italic:=True
   else E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Italic:=False;
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Size:=font.Size;
  if fsStrikeOut in font.Style
   then E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Font.Strikethrough:=True
   else E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Font.Strikethrough:=False;
  if fsUnderline in font.Style then
   E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Font.Underline:=xlUnderlineStyleSingle
   else E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Font.Underline:=xlUnderlineStyleNone;
  E.ActiveWorkbook.Sheets.Item [sheet].Range
    [range].Font.Color:=font.Color;
 except
  SetFontRange:=false;
 end;
End;

Так как Excel имеет больше возможностей для отображения шрифта, то для реализации их можно использовать дополнительную функцию SetFontRangeEx. Аргумент Superscript=True определяет написание символов как верхний индекс. Subscript=True отображает символы как нижний индекс. Цвет символов может определяться не только полем Color объекта Font, но и полем ColorIndex того же объекта. ColorIndex может принимать следующие значения: -4105 - соответствует автоматическому выбору цвета; от 1 до 56 - одному из заданных значений палитры цветов. Underline определяет стиль подчеркивания (integer) и может принимать одно из пяти значений (смотрите исходный текст на домашней странице).

Function SetFontRangeEx(sheet:variant;range:string;
  underlinestyle,colorindex:integer;superscript,subscript:boolean):boolean;
begin
 SetFontRangeEx:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Superscript:=superscript;
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Subscript:=subscript;
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.ColorIndex:=colorindex;
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Underline:=underlinestyle;
 except
  SetFontRangeEx:=false;
 end;
End;


Формат границ ячейки

Границы ячейки имеют следующие свойства: цвет, стиль и толщина. Чтобы получить доступ к границе, используем коллекцию Borders объекта Range, которая через индекс (Edge) предоставляет доступ к той или иной стороне границы ячейки (левая, правая и т.д. сторона). Edge может принимать одно из 8 определенных значений. Объекты коллекции Borders определяют цвет границы, который может задаваться выбором из определенной в Excel палитры или как комбинация из трех цветов RGB. Свойство ColorIndex содержит индекс цвета: когда нас не устраивает цвет из заранее определенной палитры, тогда используем свойство Color, в которое запишем значение из комбинации трех основных цветов, например: Color= RGB(200,100,125). Стиль границы (LineStyle) имеет тип integer и одно из 8 предопределенных значений (смотрите приложение). Толщина границы (Weight) имеет тип integer и одно из 4 значений. Исходный текст функции для установки параметров границы ячейки смотрите ниже.

Function SetBorderRange(sheet:variant;range:string;
  Edge,LineStyle,Weight,ColorIndex,Color:integer):boolean;
begin
 SetBorderRange:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
   [Edge].Weight:=Weight;
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
   [Edge].LineStyle:=LineStyle;
  if ColorIndex>0 then
   E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
   [Edge].ColorIndex:=ColorIndex
  else
   E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
   [Edge].Color:=color;
 except
  SetBorderRange:=false;
 end;
End;


Формат заливки ячейки

Заливка ячейки определяется цветом, фоновым рисунком и цветом фонового рисунка. Доступ к этим полям осуществляется через объект Interior, который является свойством объекта Range. Цвет заливки может выбираться из определенной палитры цветов, в этом случае индекс цвета записывается в поле ColorIndex. Если необходимо задать цвет, отличный от цветов палитры, используется поле Color, в которое записывается значение комбинации трех основных цветов RGB. Фоновый рисунок заливки выбирается путем записи в поле Pattern константы из списка (смотрите исходный текст на домашней странице). Цвет фонового рисунка выбирается из цветовой палитры с записью в переменную PatternColorIndex цветового индекса или записью непосредственно значения RGB в поле PatternColor. Функция SetPatternRange реализует в среде Delphi управление форматом заливки ячеек. В этой функции, как и во всех предыдущих, действия могут выполняться как над одной ячейкой так и над множеством, все определяется форматом аргумента функции range:string.

Function SetPatternRange(sheet:variant;range:string;
  Pattern,ColorIndex,PatternColorIndex,Color,PatternColor:integer):boolean;
begin
 SetPatternRange:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Interior.Pattern:=Pattern;
  if ColorIndex>0
   then E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Interior.ColorIndex:=ColorIndex
   else E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Interior.Color:=color;
  if PatternColorIndex>0
   then E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Interior.PatternColorIndex:=PatternColorIndex
   else E.ActiveWorkbook.Sheets.Item[sheet].Range
    [range].Interior.PatternColor:=PatternColor;
 except
  SetPatternRange:=false;
 end;
End;


Некоторые дополнительные возможности

Мы рассмотрели основные функции работы с ячейками: запись/чтение и установка формата. К этому можно добавить еще те, которые пригодятся на практике. Если мы работаем с областью, то внутри этой области можно обращаться к ячейкам по номеру колонки и столбца относительно начала этой области. Смотрите пример: E.ActiveWorkbook.Sheets.Item[sheet].Range['A5:B10'].Cells.Item[1,1]:=2343. Значение будет записано в ячейку A5.

Для записи формул можно использовать следующий оператор E.ActiveWorkbook.Sheets.Item[sheet].Range['A1'].Formula: ='=$A$4+$A$10'.

Для выделения области листа, заполненного информацией, используйте оператор E.ActiveWorkbook.Sheets.Item[sheet].UsedRange.Select;

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

E.ActiveWorkbook.Sheets.Item[sheet].UsedRange.Count - количество ячеек.

E.ActiveWorkbook.Sheets.Item[sheet].UsedRange.Columns.Count - количество столбцов.

E.ActiveWorkbook.Sheets.Item[sheet].UsedRange.Rows.Count - количество строк.

Для вычисления адреса заполненной области (левая верхняя ячейка - правая нижняя ячейка) можно использовать оператор E.ActiveWorkbook.Sheets.Item[sheet].UsedRange.Address, который возвращает строку, содержащую область адресов.

Мы, в целом, закончили формирование формата данных ячеек таблицы Excel. Далее рассмотрим настройки листа, просмотр печати, печать. Полные исходные тексты с примерами смотрите по адресу www.kornjakov.ru/st2_3.zip. По всем вопросам можете обратиться к автору по адресу [email protected] или www.kornjakov.ru.

Василий КОРНЯКОВ

Литература: Н. Елманова, С. Трепалин, А. Тенцер "Delphi 6 и технология COM" "Питер" 2002.

Версия для печатиВерсия для печати

Номер: 

27 за 2003 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!