Диаграммы Excel

Материал из DRKB



Если информация в виде таблиц не воспринимается так, как хотелось бы, то представьте ее в виде графика или диаграммы. Графическое отображение информации усиливает ее восприятие. В Excel есть возможность программировать отображение информации в виде диаграмм и графиков, и вы можете воспользоваться этим, чтобы сделать свою программу более информативной и конкурентно-способной. Для создания и работы с диаграммами в Excel используется коллекция Charts объекта Application. Через эту коллекцию мы можем получить полный доступ ко всем диаграммам и их свойствам. Перед тем, как создавать диаграмму, рассмотрим ее внешний вид и свойства (см. рис.).

Clip0072.gif


Диаграмма представляет собой прямоугольную область, на которой расположены: область построения диаграммы, заголовок, легенда. В области построения диаграммы располагается диаграмма и подписи осей, которые могут быть вынесены за эту область. Исходные данные для построения диаграммы представляют собой прямоугольную область ячеек листа.


Создание диаграммы[править | править код]

Для создания диаграммы используем метод 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;


См. также[править | править код]


Author: Василий КОРНЯКОВ
Source: http://www.kornjakov.ru