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

EXCEL. Часть 2.

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

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

Доступ к ячейке или ячейкам в Excel предоставляет объект Range. Этот объект обладает всеми необходимыми свойствами и методами, чтобы писать, читать из ячейки и изменять все ее свойства. Для того, чтобы просто записать информацию в ячейку, необходимо присвоить объекту Range значение, записанное в переменной типа variant. Например: Range['A1']:=123.25; или Range['A1']:='ячейка';. Для записи (чтения) в ячейку из приложений на Delphi разработаем несколько функций. Аргумент (range:string) этих функций может принимать значения, которые соответствуют одной ячейке (например 'A1') или группе ячеек (например 'A1:D5').

Function SetRange (sheet:variant;range:string;
  value_:variant):boolean;
begin
 SetRange:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range[range]:=value_;
 except
  SetRange:=false;
 end;
End;

Читать информацию одновременно можно только из одной ячейки. Если попытаться читать из группы ячеек, то можно получить ошибку. Поэтому аргумент range:string в функции GetRange принимает только такие значения, как, например 'A1'. В этих функциях чтения и записи, а также и во всех последующих аргумент sheet может принимать как числовые значения (номер листа), так и строковые (имя листа).

Function GetRange (sheet:variant;range:string):variant;
begin
 try
  GetRange:=E.ActiveWorkbook.Sheets.Item[sheet].Range[range];
 except
  GetRange:=null;
 end;
End;


Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, - изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
  column:variant;width:real):boolean;
begin
 SetColumnWidth:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Columns
   [column].ColumnWidth:=width;
 except
  SetColumnWidth:=false;
 end;
End;

Для определения ширины столбца используйте следующий оператор: width:=E.ActiveWorkbook .Sheets.Item[sheet].Columns[column].ColumnWidth;

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
  height:real):boolean;
begin
 SetRowHeight:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
 except
  SetRowHeight:=false;
 end;
End;

Для определения высоты строки используйте следующий оператор: height:=E.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;


Числовой формат ячейки

Данные в ячейках таблицы могут отображаться различным образом (число, дата, время, строка), способ отображения данных называется числовым форматом. Значение числового формата ячейки хранится в свойстве NumberFormat объекта Range, имеет тип строка и может содержать, например, такие значения: 'General', 'hh:mm:ss', '0,000'. Они соответствуют общему формату, формату времени и формату числа с тремя знаками после запятой. Опытным путем можно получить значения всех форматов, для этого в Delphi используем функцию GetFormatRange.

Function GetFormatRange (sheet:variant;
  range:string):string;
begin
 try
  GetFormatRange:=E.ActiveWorkbook.Sheets.Item
   [sheet].Range[range].NumberFormat;
 except
  GetFormatRange:='';
 end;
End;

Для установки числового формата ячейки можем использовать функцию SetFormatRange, которая записывает значение числового формата в свойстве NumberFormat объекта Range.

Function SetFormatRange(sheet:variant;range:string;
  format:string):boolean;
begin
 SetFormatRange:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].NumberFormat:=format;
 except
  SetFormatRange:=false;
 end;
End;

Данная функция изменяет числовой формат не только в одной отдельно взятой ячейке, а также в группе ячеек. Это определяется значением аргумента range:string. Смотрите примеры: 'A:A' - изменение формата во всех ячейках столбца A, '2:5' - изменение формата во всех ячейках столбцов со второй по пятую включительно, 'A:C' - изменение формата во всех ячейках столбцов с A по C включительно; 'A1:C5' - изменение формата во всех ячейках области, ограниченной колонками A...C и строками 1...5 включительно.


Выравнивание текста в ячейке

Следующим шагом изменения режима отображения данных в ячейках книги Excel рассмотрим выравнивание текста по горизонтали и вертикали. Для выравнивания по горизонтали используется свойство HorizontalAlignment объекта Range, которое применяем в функции SetHorizontalAlignment. Если записывать в аргумент alignment:integer этой функции определенные числовые константы, то получим различные варианты выравнивания текста по горизонтали. Смотрите список констант и функцию, реализующую выравнивание текста по горизонтали.

const
 xlHAlignCenter=-4108;
 xlHAlignDistributed=-4117;
 xlHAlignJustify=-4130;
 xlHAlignLeft=-4131;
 xlHAlignRight=-4152;
 xlHAlignCenterAcrossSelection=7;
 xlHAlignFill=5;
 xlHAlignGeneral=1;
Function SetHorizontalAlignment (sheet:variant;range:string;
  alignment:integer):boolean;
begin
 SetHorizontalAlignment:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].HorizontalAlignment:=alignment;
 except
  SetHorizontalAlignment:=false;
 end;
End;

Для выравнивания по вертикали используем свойство VerticalAlignment объекта Range. Смотрите набор констант и функцию SetVerticalAlignment.

const
 xlVAlignBottom=-4107;
 xlVAlignCenter=-4108;
 xlVAlignDistributed=-4117;
 xlVAlignJustify=-4130;
 xlVAlignTop=-4160;
Function SetVerticalAlignment (sheet:variant;range:string;
  alignment:integer):boolean;
begin
 SetVerticalAlignment:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].VerticalAlignment:=alignment;
 except
  SetVerticalAlignment:=false;
 end;
End;


Другие режимы отображения текста в ячейке

Угол, под которым текст отображается в ячейке, определяется свойством Orientation объекта Range. Значение Orientation может находиться в пределах от -90 до 90. Функция SetOrientation реализует эту возможность в приложениях Delphi.

Function SetOrientation (sheet:variant;range:string;
  orientation:integer):boolean;
begin
 SetOrientation:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].Orientation:=orientation;
 except
  SetOrientation:=false;
 end;
End;

Текст, ширина которого больше ширины ячейки, может отображаться несколькими строками (переносом по словам) или одной строкой. Это свойство ячейки содержится в поле WrapText объекта Range. Функция SetWrapText изменяет это поле и режим отображения текста большой длины.

Function SetWrapText(sheet:variant;range:string;
  WrapText:boolean):boolean;
begin
 SetWrapText:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].WrapText:=WrapText;
 except
  SetWrapText:=false;
 end;
End;

Можно использовать и альтернативный способ для размещения текста большой длины в ячейке. Он основан на автоподборе ширины текста под ширину ячейки. Свойство.ShrinkToFit объекта Range определяет этот режим отображения. Смотрите функцию SetShrinkToFit. Если установлен режим "перенос по словам", то действие этой функции отменяется.

Function SetShrinkToFit (sheet:variant;range:string;
  ShrinkToFit:boolean):boolean;
begin
 SetShrinkToFit:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].ShrinkToFit:=ShrinkToFit;
 except
  SetShrinkToFit:=false;
 end;
End;

Несколько ячеек можно объединить. Для этой цели используется свойство MergeCells объекта Range[range], где range - область для объединения, например "A1:C2". Если в MergeCells записывает значение True, то это приводит к объединению ячеек. Для реализации в приложениях на Delphi используем функцию SetMergeCells.

Function SetMergeCells (sheet:variant;range:string;
  MergeCells:boolean):boolean;
begin
 SetMergeCells:=true;
 try
  E.ActiveWorkbook.Sheets.Item[sheet].Range
   [range].MergeCells:=MergeCells;
 except
  SetMergeCells:=false;
 end;
End;

Мы рассмотрели формирование формата данных ячейки листа книги Excel. Далее рассмотрим выбор шрифта и другие свойства ячейки, такие как цвет и стиль фона и границы. Исходные тексты с примерами смотрите по адресу www.kornjakov.ru/st2_2.zip. По всем вопросам вы можете обратиться к автору по адресу _kvn@mail.ru или www.kornjakov.ru.

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

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

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

Номер: 

26 за 2003 год

Рубрика: 

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