
- •Часть II
- •Главные составные части среды программирования
- •Формы, модули
- •Интеллектуальный редактор
- •Палитра Компонент
- •Дополнительные элементы
- •Структура проекта
- •Структура модуля
- •Проект Delphi
- •Стандартные компоненты
- •Свойства формы
- •События формы
- •Создание форм разного вида
- •Конструирование меню
- •Компоненты
- •Общие принципы создания меню
- •Пункты меню
- •TMainMenu - компонент
- •Основные свойства tMainMenu
- •Основные методы tMainMenu
- •События tMainMenu
- •TMenuItem - класс
- •Основные свойства tMenuItem
- •Основные методы tMenuItem
- •События tMenuItem
- •Рисование и закраска Графические компоненты
- •Свойство объектов Canvas
- •Полный список методов tCanvas
- •Основные события tCanvas
- •Объект tPaintBox
- •TImage - компонент
- •TShape - компонент
- •Файлы и устройства ввода/вывода
- •Использование файловых переменных. Типы файлов
- •Операции ввода/вывода
- •Процедуры и функции для работы с файлом
- •Контроль ошибок ввода/вывода
- •Атрибуты файла. Поиск файла
- •Базовые классы tStream и tHandleStream
- •Свойства и методы класса Tstream
- •Класс tFileStream
- •Класс tMemoryStream
- •Класс tStringStream
- •Оповещение об изменениях в файловой системе
- •Компоненты, используемые для создания баз данных
- •Открытие и закрытие DataSet
- •Работа с Данными
- •Использование SetKey для поиска в таблице
- •Использование фильтров для ограничения числа записей в DataSet
- •Теория ole
- •Ole Контейнер Основные свойства и методы компонента OleContainer.
- •Работа с ms Office в Delphi.
- •Объекты ms Word
- •Свойства и методы объекта Selection
- •Коллекция объектов Shapes
- •Объекты ms Excel
- •Создание объекта ExceLApplication, запуск и визуализация окна приложения
- •Работа с листами рабочей книги
- •Программирование диаграмм Excel в Delphi
- •Коллекция Charts, размещение диаграммы и исходных данных
- •Тип диаграммы
Работа с листами рабочей книги
Лист, ячейки которого непосредственно хранят информацию, является принадлежностью книги. В рабочей книги может быть больше одного листа.
Как получить доступ к списку листов или к любому листу рабочей книги? Ответ: с помощью коллекции Sheets. Как и любая коллекция, она содержит свойство Count:integer (количество элементов коллекции) и набор объектов Item(i:integer) — собственно листы, где i — индекс выбранного листа (от 1 до Count). Некоторые методы коллекции Sheets: Select — выделение всех листов рабочей книги, Сору — копирование всех листов в новую рабочую книгу, PrintPreview — предварительный просмотр печати, Printout — вывод на печать, Add — добавление нового листа в рабочую книгу.
Рассмотрим метод Add подробнее. Его можно использовать как без аргументов, так и с аргументами, определяющими место, куда будут добавлены листы (лист), их количество и тип. Если использовать метод Add так, как показано в следующем примере, то будет добавлен лист перед листом Sheet.
procedure TOKBottomDlg3.ButtonlClick(Sender: TObject);
begin
Sheets.Add(Before:=Sheet);
end;
Добавив листы или просто открыв или создав рабочую книгу, мы можем получить список листов и доступ к любому листу рабочей книги. Для этого используем уже известные свойства коллекции Sheets.
После загрузки списка листов мы можем получить доступ к любому листу для работы с ним. Для начала попробуем изменить непосредственно свойства самого листа, например его имя. Имя листа представляет собой строку и содержится в свойстве Name объекта Sheet. Доступ к листу рабочей книги получим, например, с помощью следующей процедуры.
var Sheet:variant;
procedure TOKBottomDlg3.ListBoxlClick(Sender: TObject);
begin
Sheet :=Sheets . item[List.Boxl. Itemlndex+l] ;
end;
Для того чтобы переименовать выбранный рабочий лист, запишем в свойство Name новое значение имени листа, например:
Sheet.Name: =’Новый лист’;
Мы можем скопировать лист и его содержание с помощью метода Сору объекта Sheet. Этот метод позволяет копировать лист и вставлять копию или до или после оригинала — это зависит от значения аргумента метода Сору. Вот пример использования этого метода в процедурах, разработанных в среде Delphi.
Sheet.Copy(before:=Sheet);
Sheet.Copy(after:=Sheet);
После работы с книгой может понадобиться удалить некоторые листы. Для этого предназначен метод Delete объекта Sheet.
E.DisplayAlerts:=False; Sheet.Delete; E.DisplayAlerts:=True;
Для доступа к ячейкам можно использовать два разных объекта — объект типа Range, который ассоциируется с областью ячеек, или непосредственно объект Cell (ячейка листа рабочей книги). Если первый объект удобен для работы с целыми областями ячеек, то второй больше подходит для работы с отдельно взятой ячейкой. Эти объекты принадлежат объекту "лист" и требуют задания координат ячейки или области ячеек при обращении к ним. Например, для задания объекта, ассоциированного с областью ячеек A1:D5, используем следующий оператор:
MyRange:=Sheet.Range[Al:D5];
где Sheet — ссылка на лист рабочей книги. После удачного выполнения данного оператора переменная MyRange:variant содержит ссылку на объект, ассоциированный с выбранной областью ячеек. Другой вариант данного оператора:
MyRange:= Е.Sheets.Item(1).Range('Al:D5');
Здесь мы получаем ссылку на область ячеек первого листа рабочей книги.
Обеспечить доступ к отдельной ячейке можно с помощью как объекта Range, так и объекта Cell. Использование последнего в операторе получения доступа к ячейке может выглядеть так:
MyCell:=Sheet.Cells[1,1];
При выполнении данного оператора переменная MyCell будет хранить ссылку на ячейку А1.
Итак, мы получили доступ к ячейкам. Попробуем записать в них информацию из приложения на Delphi.
procedure T0KBottomDlg4.ButtonlClick(Sender: TObject);
var a : integer;
begin
randomize;
for a:=l to 100 do Sheet.Cells(a,1):=random(10000);
end;
В данном примере переменная Sheet содержит ссылку на лист рабочей книги (эта переменная была инициализирована ранее). Полный исходный текст приложения находится на сопроводительном диске книги.
Если для записи в ячейки мы присваивали объекту Cells(row, column) значение, то для чтения данных используем оператор, в котором строковой переменной присваивается значение объекта Cells(row, column). Но ячейки могут иметь разные типы. Например, они могут содержать как целые значения, так и формулы. Для чтения или записи значений используются, например, свойства Value и Text ячейки, для записи формулы — свойство Formula. Переменная, которую отображает ячейка, хранится в свойствах Text и Value объекта Range (Cells), поэтому для того чтобы ее получить, достаточно прочитать значение одного из этих свойств. Если тип данных (формат) значения ячейки неизвестен, используем свойство Text, чтобы получить его в виде строки. Когда тип данных известен, можно попытаться использовать свойство Value. Допустим, нам неизвестен тип данных ячейки. Используем следующую процедуру, которая позволяет прочитать ее значение.
value1.Text:=Range.Text;
Формат ячейки определяется свойством NumberFormat объекта Range. Это свойство имеет строковый тип, а форматы данных представляют собой определенным образом заданные символьные константы. Используя свойство NumberFormat, можно изменить формат любой ячейки или области, а также прочитать значение формата с целью его анализа для внесения изменений.
Определим формат ячейки, которая содержит дату. Для этого воспользуемся представленной ниже процедурой, записанной для приложения Delphi
Range:=forml.E.ActiveSheet.Range[addres.Text];
NumberFormat.Text:=Range.NumberFormat;
От методов, позволяющих изменять значение ячеек листа рабочей книги Excel, переходим к изучению других свойств и методов основного объекта приложения Excel — ячейки. Начнем с простого — с определения и изменения размеров самой ячейки, связанных с размерами строк и столбцов. Мы определились, что ячейка всегда определяется объектами Range или Cells. Используя свойства ColumnWidth и RowHeight этих объектов, мы имеем возможность изменить ширину и высоту ячейки. Очевидно, что эти изменения повлекут изменения ширины столбца и высоты строки. В качестве примера использования этих свойств рассмотрим процедуры, позволяющие определить и изменить размеры заданной ячейки.
Range.ColumnWidth:=StrToFloat(ColumnWidth.Text);
Важным свойством текста в Excel является шрифт отображаемых значений ячеек и текста других объектов. Для ячеек шрифт является одним из свойств объекта Range, при этом в одной ячейке не может быть, например, два фрагмента текста с разным шрифтом. Шрифт определяется свойством Font ячейки или области ячеек.
Свойство |
Тип |
Значение |
Name |
String |
Имя |
Background |
Integer |
Стиль прорисовки фона (используется только для диаграмм) |
FontStyle |
String |
Строковое описание стиля |
Bold |
Boolean |
Полужирный |
Italic |
Integer |
Курсив |
Size |
Boolean |
Размер шрифта |
Strikethrough |
Boolean |
Зачеркнутый |
Superscript |
Boolean |
Верхний индекс |
Subscript |
Boolean |
Нижний индекс |
OutlineFont |
Boolean |
Не используется |