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