Диаграммы Excel

Если информация в виде таблиц не воспринимается так, как хотелось бы, то представьте ее в виде графика или диаграммы. Графическое отображение информации усиливает ее восприятие. В Excel есть возможность программировать отображение информации в виде диаграмм и графиков, и вы можете воспользоваться этим, чтобы сделать свою программу более информативной и конкурентно-способной.
Для создания и работы с диаграммами в Excel используется коллекция Charts объекта Application. Через эту коллекцию мы можем получить полный доступ ко всем диаграммам и их свойствам. Перед тем, как создавать диаграмму, рассмотрим ее внешний вид и свойства (см. рис.).
Диаграмма представляет собой прямоугольную область, на которой расположены: область построения диаграммы, заголовок, легенда. В области построения диаграммы располагается диаграмма и подписи осей, которые могут быть вынесены за эту область. Исходные данные для построения диаграммы представляют собой прямоугольную область ячеек листа.
== Создание диаграммы ==
Для создания диаграммы используем метод Add коллекции Charts. Процедура AddChart (для Delphi) создает диаграмму, устанавливает ее вид и возвращает ее имя для доступа к этой диаграмме в дальнейшем. В качестве второго аргумента функции можно использовать константу xl3Darea(-4098), которая позволяет создать объемную диаграмму. Значения других констант, которые соответствуют другим видам диаграмм, и исходный текст смотрите на www.kornjakov.ru/st2_5.zip.
function AddChart(var AName: string; AChartType: Integer): Boolean;
begin
 Result := True;
 try
 AName := E.Charts.Add.Name;
 E.Charts.Item[AName].ChartType := AhartType;
 except
 Result := False;
 end;
end;
== Область данных диаграммы ==
Данные для построения диаграммы должны быть расположены на любом листе рабочей книги и представлять собой прямоугольную область. Для определения рабочей области данных используется метод SetSourceData, первый аргумент которого - ссылка на лист и область ячеек, второй - определяет способ использования данных (по строкам/столбцам).
function SetSourceData(AName, ASheet: Variant;
 ARange: string; XlRowCol: Integer): Boolean;
begin
 Result := True;
 try
 E.ActiveWorkbook.Charts.Item[AName].SetSourceData(Source := E.ActiveWorkbook.Sheets.Item[ASheet].Range[ARange], PlotBy := XlRowCol);
 except
 Result := False;
 end;
end;
== Область диаграммы ==
Если диаграмма расположена на одном листе с данными, то можно изменять координаты и размеры области диаграммы. Диаграмма может быть размещена также на отдельном листе, тогда ее размеры совпадают с размером листа. Для доступа к координатам и размерам этой области используем объект ChartArea (область диаграммы). Функция PositionChart изменяет ее координаты и размеры. Аналогично мы можем получить координаты и размеры диаграммы. Для этого достаточно считать значения Left, Top, Width и Height объекта ChartArea.
function PositionChart(AName: Variant; ALeft, ATop, AWidth, AHeight: Real): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].ChartArea.Left := ALeft;
 E.Charts.Item[AName].ChartArea.Top := ATop;
 E.Charts.Item[AName].ChartArea.Width := AWidth;
 E.Charts.Item[AName].ChartArea.Height := AHeight;
 except
 Result := False;
 end;
end;
Кроме размеров и координат, область диаграммы имеет свойства, которые определяют стиль, цвет, толщину рамки окаймления, а также рисунок и цвет самой области. Свойства рамки содержатся в объекте Border области ChartArea. Цвет рамки может быть представлен как комбинация из трех цветов RGB или выбран из палитры. Толщина и стиль выбираются из конечного, определенного списка значений (смотрите исходный текст). Используем функцию BorderChartArea для установки типа и цвета рамки из приложений Delphi.
function BorderChartArea(AName: Variant; AColor, ALineStyle, AWeight: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].ChartArea.Border.Color := Aolor;
 E.Charts.Item[AName].ChartArea.Border.Weight := AWeight;
 E.Charts.Item[AName].ChartArea.Border.LineStyle := ALineStyle;
 except
 Result := False;
 end;
end;
Свойства области диаграммы содержатся в объекте Interior. Цвет области и рисунка заполнения может быть представлен как комбинация из трех цветов RGB или выбран из палитры. Вид рисунка заполнения выбирается из конечного, определенного списка значений (смотрите исходный текст). Функция BrushChartArea устанавливает цветовые параметры области диаграммы.
function BrushChartArea(AName: Variant; AColor, APattern, APatternColor: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].ChartArea.Interior.Color := AColor;
 E.Charts.Item[AName].ChartArea.Interior.Pattern := APattern;
 E.Charts.Item[AName].ChartArea.Interior.PatternColor := APatternColor;
 except
 Result := False;
 end;
end;
Для установки фона области диаграммы также можно использовать рисунок, загруженный из файла в графическом формате. Для этого используется метод UserPicture объекта Fill области ChartArea.
function BrushChartAreaFromFile(AName: Variant; AFileName: string): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].ChartArea.Fill.UserPicture(PictureFile := AFileName);
 E.Charts.Item[AName].ChartArea.Fill.Visible := True;
 except
 Result := False;
 end;
end;
Область диаграммы - это область, которая содержит все остальные объекты диаграммы. Рассмотрим остальные компоненты, расположенные на этой области.
== Область построения диаграммы ==
Область построения диаграммы служит для размещения графического изображения. Она имеет координаты относительно области диаграммы и другие свойства, присущие области: цвет и стиль рамки, цвет заливки и фоновый рисунок. Для доступа к ее координатам и размерам используем объект PlotArea (область построения диаграммы), который содержит все свойства области. Функция PositionPlotArea изменяет ее координаты и размеры.
function PositionPlotArea(AName: Variant; ALeft, ATop, AWidth, AHeight: Real): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].PlotArea.Left := ALeft;
 E.Charts.Item[AName].PlotArea.Top := ATop;
 E.Charts.Item[AName].PlotArea.Width := AWidth;
 E.Charts.Item[AName].PlotArea.Height := AHeight;
 except
 Result := False;
 end;
end;
Другими важными свойствами области диаграммы являются свойства, определяющие стиль, цвет, толщину рамки окаймления и рисунок, цвет самой области. Свойства рамки содержатся в объекте Border области PlotArea. Цвет рамки может быть представлен как комбинация из трех цветов RGB или выбран из палитры. Толщина и стиль выбираются из конечного, определенного списка значений (смотрите исходный текст).
function BorderPlotArea(AName: Variant; AColor, ALineStyle, AWeight: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].PlotArea.Border.Color := AColor;
 E.Charts.Item[AName].PlotArea.Border.Weight := AWeight;
 E.Charts.Item[AName].PlotArea.Border.LineStyle := ALineStyle;
 except
 Result := False;
 end;
end;
Цветовая характеристика области построения диаграммы содержится в объекте Interior. Цвет области и рисунка заполнения может быть представлен как комбинация из трех цветов RGB или выбран из палитры. Вид рисунка заполнения выбирается из конечного, определенного списка значений (смотрите исходный текст). Функция BrushPlotArea устанавливает цветовые параметры области диаграммы.
function BrushPlotArea(AName: Variant; AColor, APattern, APatternColor: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].PlotArea.Interior.Color := AColor;
 E.Charts.Item[AName].PlotArea.Interior.Pattern := APattern;
 E.Charts.Item[AName].PlotArea.Interior.PatternColor := APatternColor;
 except
 Result := False;
 end;
end;
Фон области построения диаграммы может быть представлен не только в виде определенного узора и цветовой комбинации, но и в виде рисунка, загруженного из графического файла. Для этого используется метод UserPicture объекта Fill области PlotArea.
function BrushPlotAreaFromFile(AName: Variant; AFileName: string): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].PlotArea.Fill.UserPicture(PictureFile := AFileName);
 E.Charts.Item[AName].PlotArea.Fill.Visible := True;
 except
 Result := False;
 end;
end;
== Заголовок диаграммы ==
Заголовок диаграммы имеет такие же параметры, как и любая область, но есть некоторые отличия. Ширина и высота заголовка определяется размером шрифта, и, в отличие от области диаграммы, важным параметром является текст надписи заголовка и сам шрифт как объект, входящий в ChartTitle. Полные версии функций для использования в приложениях Delphi смотрите на www.kornjakov.ru/st2_5.zip, здесь представлены только их фрагменты. Рассмотрим основные свойства объекта ChartTitle. Заголовок и текст заголовка выводится при условии, что в поле HasTitle объекта Chart записано значение True, а поле Text объекта ChartTitle записан сам текст. Смотрите пример:
 E.Charts.Item[name].HasTitle := True;
 E.Charts.Item[name].ChartTitle.Text := 'Заголовок диаграммы';
Координаты заголовка содержатся в полях Left и Top объекта ChartTitle. Для перемещения заголовка запишите в эти поля новые значения координат. Для определения координат считайте значения из этих полей.
 E.Charts.Item[name].ChartTitle.Left := Left;
 E.Charts.Item[name].ChartTitle.Top := Top;
Чтобы изменить визуальные параметры рамки, используйте объект Border и его поля Color (цвет), Weight (толщина) и LineStyle (стиль линии)
 E.Charts.Item[name].ChartTitle.Border.Color := Color;
 E.Charts.Item[name].ChartTitle.Border.Weight := Weight;
 E.Charts.Item[name].ChartTitle.Border.LineStyle := LineStyle;
Для заполнения цветом и узором области заголовка используйте объект Interior и его поля Color (цвет), Pattern (узор) и PatternColor (цвет узора).
 E.Charts.Item[name].ChartTitle.Interior.Color := Color;
 E.Charts.Item[name].ChartTitle.Interior.Pattern := Pattern;
 E.Charts.Item[name].ChartTitle.Interior.PatternColor := PatternColor;
Чтобы заполнить область заголовка рисунком из графического файла, используйте метод UserPicture объекта Fill. Чтобы этот рисунок стал видимым, запишите в поле Visible объекта Fill значение True.
 E.Charts.Item[name].ChartTitle.Fill.UserPicture(PictureFile := FileName);
 E.Charts.Item[name].ChartTitle.Fill.Visible := True;
== Тип диаграммы ==
Тип диаграммы определяет, каким образом отображается информация: в виде плоских или объемных фигур или графиков, а также сам вид этих фигур. Существует около 70 типов диаграмм, и чтобы выбрать один из них, используется метод ApplyCustomType. В качестве аргумента этого метода используется константа из списка (см. приложение www.kornjakov.ru/st2_6.zip). В Delphi выбор типа диаграммы можно реализовать, используя функцию SetChartType.
function SetChartType(AName: Variant; AChartType: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].ApplyCustomType(ChartType := AChartType);
 except
 Result := False;
 end;
end;
== Размещение диаграммы ==
Диаграмма может размещаться совместно с данными или на отдельном листе. Размещение диаграммы лучше совмещать с процессом ее создания, но можно выполнить эту процедуру и самостоятельно. При этом необходимо учитывать, что при изменении размещения меняется и имя диаграммы (не путать с названием). Для размещения диаграммы используйте функцию SetChartLocation, аргумент xlLocation которой может иметь одно из двух значений (xlLocationAsNewSheet или xlLocationAsObject).
function SetChartLocation(var AName: Variant; ASheet: Variant; xlLocation: Integer): Boolean;
begin
 Result := True;
 try
 AName := E.Charts.Item[AName].Location(Where := xlLocationAsObject, Name := ASheet).Name;
 except
 Result := False;
 end;
end;
== Наклон и поворот ==
Наклон диаграммы можно выполнить на угол от -90° до +90°. Значения, выходящие за эти пределы, вызывают ошибку. Выбор угла поворота осуществляется записью значения угла в свойство Elevation объекта Chart. Поворот диаграммы осуществляется записью в поле Rotation объекта Chart значения угла поворота. Этот угол может иметь значения от 0° до 360°. Для задания углов наклона и поворота в приложениях на Delphi можно использовать функции ElevationChart и RotationChart.
function ElevationChart(AName: Variant; AElevation: Real): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].Elevation := AElevation;
 except
 Result := False;
 end;
end;
function RotationChart(AName: Variant; ARotation: Real): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].Rotation := ARotation;
 except
 Result := False;
 end;
end;
== Легенда ==
Легенда диаграммы представляет собой подписи к той части, которая передает информацию в графическом виде. Как и любая область, она обладает типичными свойствами, присущими им. Есть одно отличие - шрифт элемента легенды. Чтобы легенда была видима на диаграмме, установите поле HasLegend объекта Chart в True.
E.Charts.Item[name].HasLegend := True;
Затем можно установить координаты и размеры легенды, параметры границы (рамки) и области. Для этого используем следующие функции:
Установка размеров и координат.
function PositionSizeLegend(AName: Variant; ALeft, ATop, AWidth, AHeight: Real): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].Legend.Left := ALeft;
 E.Charts.Item[AName].Legend.Top := ATop;
 E.Charts.Item[AName].Legend.Width := AWidth;
 E.Charts.Item[AName].Legend.Height := AHeight;
 except
 Result := False;
 end;
end;
Установка типа и цвета рамки.
function BorderLegend(AName: Variant; AColor, ALineStyle, AWeight: Integer): Boolean;
begin
 Result :=True;
 try
 E.Charts.Item[AName].Legend.Border.Color := AColor;
 E.Charts.Item[AName].Legend.Border.Weight := AWeight;
 E.Charts.Item[AName].Legend.Border.LineStyle := ALineStyle;
 except
 Result := False;
 end;
end;
Установка цвета и типа узора области.
function BrushLegend(AName: Variant; AColor, APattern, APatternColor: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].Legend.Interior.Color := AColor;
 E.Charts.Item[AName].Legend.Interior.Pattern := APattern;
 E.Charts.Item[AName].Legend.Interior.PatternColor := APatternColor;
 except
 Result := False;
 end;
end;
Заливка области из файла.
function BrushLegendFromFile(AName: Variant; AFileName: string): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].Legend.Fill.UserPicture(PictureFile := AFileName);
 E.Charts.Item[AName].Legend.Fill.Visible := True;
 except
 Result := False;
 end;
end;
Шрифт элемента легенды.
Объект Legend имеет доступ к коллекции LegendEntries, посредством которой можно получить доступ к шрифту элемента легенды. Например: 
E.Charts.Item[name].Legend.LegendEntries.Item[LegendEntries].Font
где LegendEntries - индекс элемента. Чтобы согласовать поля объектов "Шрифт" в Excel и Delphi, напишем функцию FontToEFont, которая преобразует шрифт объекта Delphi в шрифт объекта Excel. Эту функцию можно будет использовать везде, где необходимо установить шрифт.
function FontToEFont(AFont: TFont; EFont: Variant): Boolean;
begin
 Result := True;
 try
 EFont.Name := AFont.Name;
 EFont.Bold := (fsBold in AFont.Style); // Жирный
 EFont.Italic := (fsItalic in AFont.Style); // Наклонный
 EFont.Size := AFont.Size; // Размер
 EFont.Strikethrough := (fsStrikeOut in AFont.Style); // Перечеркнутый
 if fsUnderline in AFont.Style then
 EFont.Underline := xlUnderlineStyleSingle // Подчеркивание
 else
 EFont.Underline := xlUnderlineStyleNone; // Без подчеркивания
 EFont.Color := AFont.Color; // Цвет
 except
 Result := False;
 end;
end;
Функция FontLegendEntries устанавливает шрифт элемента(LegendEntries) легенды(Name).
function FontLegendEntries(AName, ALegendEntries: Variant; AFont: TFont): Boolean;
begin
 try
 Result := FontToEFont(AFont, E.Charts.Item[AName].Legend.LegendEntries.Item[ALegendEntries].Font);
 except
 Result := False;
 end;
end;
== Подписи осей ==
Оси диаграммы могут иметь подписи, представляющие собой области и описываемые свойствами, присущими любым прямоугольным областям на диаграмме. Рассмотрим только запись текста и включение, выключение отображения объекта "подпись оси". Доступ ко всем полям и методам подписи осуществляется через коллекцию Axes, члены которой и есть ссылки на подписи. В приложениях Delphi запись текста в объект "подпись оси" можно реализовать с помощью функции AxisChart.
function AxisChart(AName: Variant; ACategory, ASeries, AValue: string): Boolean;
begin
 Result := True;
 try
 if ACategory <> then
 E.Charts.Item[AName].Axes[xlCategory].HasTitle := True
 else
 E.Charts.Item[AName].Axes[xlCategory].HasTitle := False;
 
 if ASeries <> then
 E.Charts.Item[AName].Axes[xlSeries].HasTitle := True
 else
 E.Charts.Item[AName].Axes[xlSeries].HasTitle := False;
 
 if Value <> then
 E.Charts.Item[AName].Axes[xlValue].HasTitle := True
 else
 E.Charts.Item[AName].Axes[xlValue].HasTitle := False;
 
 E.Charts.Item[AName].Axes[xlCategory].AxisTitle.Text := ACategory;
 E.Charts.Item[AName].Axes[xlSeries].AxisTitle.Text := ASeries;
 E.Charts.Item[AName].Axes[xlValue].AxisTitle.Text := AValue;
 except
 Result := False;
 end;
end;
== Стены и основание диаграммы ==
Стены представляют собой вертикальные области, ограничивающие графическую часть диаграммы, и описываются через свойства и методы объекта Walls. Этот объект имеет такие свойства, как цвет и стиль окаймления, стиль и цвет (заливка) области стен. Функции управления этими свойствами смотрите в приложении (www.kornjakov.ru/st2_6.zip), а здесь рассмотрим их фрагменты.
Цвет, толщина и стиль рамки окаймления:
 E.Charts.Item[name].Walls.Border.Color := Color;
 E.Charts.Item[name].Walls.Border.Weight := Weight;
 E.Charts.Item[name].Walls.Border.LineStyle := LineStyle;
Цвет, рисунок и цвет рисунка заполнения стен:
 E.Charts.Item[name].Walls.Interior.Color := Color;
 E.Charts.Item[name].Walls.Interior.Pattern := Pattern;
 E.Charts.Item[name].Walls.Interior.PatternColor := PatternColor;
Заливка области стен из файла:
 E.Charts.Item[name].Walls.Fill.UserPicture(PictureFile := AFileName);
 E.Charts.Item[name].Walls.Fill.Visible := True;
Основание графической части диаграммы - область, ограничивающая диаграмму внизу. Она описывается через свойства и методы объекта Floor. Этот объект обладает аналогичными свойствами, как и область стен. Вот несколько примеров их настройки из приложений Delphi.
Цвет, толщина и стиль линий - границы основания:
 E.Charts.Item[name].Floor.Border.Color := Color;
 E.Charts.Item[name].Floor.Border.Weight := Weight;
 E.Charts.Item[name].Floor.Border.LineStyle := LineStyle;
Цвет, рисунок и цвет рисунка области основания:
 E.Charts.Item[name].Floor.Interior.Color := Color;
 E.Charts.Item[name].Floor.Interior.Pattern := Pattern;
 E.Charts.Item[name].Floor.Interior.PatternColor := PatternColor;
Заливка области основания из файла:
 E.Charts.Item[name].Floor.Fill.UserPicture(PictureFile := AFileName);
 E.Charts.Item[name].Floor.Fill.Visible := True;
== Серии коллекции ==
Рассмотрим серии коллекции - графики, набор фигур на диаграмме. Доступ к коллекциям получаем через объект SeriesCollection. Количество их зависит от размеров области данных диаграммы на рабочем листе. Чтобы получить его значение, считаем поле Count объекта SeriesCollection. Функция SeriesCount (для работы в среде Delphi) возвращает количество серий.
function SeriesCount(AName: Variant): Integer;
begin
 try
 Result := E.Charts.Item[AName].SeriesCollection.Count;
 except
 Result := -1;
 end;
end;
Рассмотрим вид коллекции - вид фигур в коллекции (куб, пирамида и др.). Я насчитал шесть видов. Для своих приложений можем использовать функцию BarShapeSeries для выбора любого из шести видов.
function BarShapeSeries(AName: Variant; ASeries, ABarShape: Integer): Boolean;
begin
 Result := True;
 try
 E.Charts.Item[AName].SeriesCollection.Item[ASeries].BarShape := ABarShape;
 except
 Result := False;
 end;
end;
Остальные параметры: параметры границы и областей коллекции аналогичны параметрам любых областей диаграммы. Привожу их краткий список в виде операторов для Delphi:
 E.Charts.Item[name].SeriesCollection.Item[series].Border.Color := Color;
 E.Charts.Item[name].SeriesCollection.Item[series].Border.Weight := Weight;
 E.Charts.Item[name].SeriesCollection.Item[series].Border.LineStyle := LineStyle;
 E.Charts.Item[name].SeriesCollection.Item[series].Interior.Color := Color;
 E.Charts.Item[name].SeriesCollection.Item[series].Interior.Pattern := Pattern;
 E.Charts.Item[name].SeriesCollection.Item[series].Interior.PatternColor := PatternColor;
 E.Charts.Item[name].SeriesCollection.Item[series].Fill.UserPicture(PictureFile := FileName);
 E.Charts.Item[name].SeriesCollection.Item[series].Fill.Visible := True;
== См. также ==
* Суперфункции MS Word and MS Excel (статья)
* Суперфункции EXCEL.
* Настройки листа и печать в MS Excel
* Диаграммы Excel
* Создание DLL-библиотеки для работы с Word/Excel из приложений на Delphi
* Суперфункции:FAQ
Author: Василий КОРНЯКОВ
Source: http://www.kornjakov.ru
Category:COM
Category:MS Office
Category:Статьи