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.
Горячие темы