Мир объектов Excel 2000


Объектная модель и программирование - часть 3


If SelType.Value = "График" Then .Type = myc.chChartTypeLineMarkers strDebug = "LineMarkers" End If 'MsgBox("Тип диаграммы - " & strDebug) 'Легенда и заголовок диаграмы .HasLegend = True .HasTitle = True .Title.Caption = "Дилеры и Объемы продаж" 'Заголовки осей Set Ax = .Axes(myc.chAxisPositionLeft) Ax.HasTitle = True Ax.Title.Font.Italic = True Ax.Title.Font.Bold = True Ax.Title.Caption = "Объем Продаж" Set Ax = .Axes(myc.chAxisPositionBottom) Ax.HasTitle = True Ax.Title.Font.size = 14 Ax.Title.Font.Bold = True Ax.Title.Caption = "Кварталы -2001" 'Установка данных .SetData myc.chDimCategories, 0, "C5:C8" .SetData myc.chDimSeriesNames, 0, "D4:F4" .SeriesCollection(0).SetData myc.chDimValues, 0, "D5:D8" .SeriesCollection(1).SetData myc.chDimValues, 0, "E5:E8" .SeriesCollection(2).SetData myc.chDimValues, 0, "F5:F8" 'Работа с серией данных. Определение тренда Set Ser = .SeriesCollection(1) Ser.TrendLines.Add Ser.TrendLines(0).Type = myc.chTrendLineTypeExponential Ser.TrendLines(0).Order = 2 Ser.TrendLines(0).IsDisplayingEquation = True

End With End With End Sub

Хотя процедура снабжена комментариями, но целесообразно дать дополнительные пояснения:

  • Прежде всего, я определяю объекты, с которыми предстоит работать - cht, Ax, Ser и другие. Хотя VBScript и бестиповый язык, но объявлять переменные все равно целесообразно - это правильный стиль программирования.
  • Затем начинается работа с корневым объектом ChartSpace. Заметьте, имя MyChartSpace, которым я пользуюсь, - это ID объекта, заданное при определении соответствующего тега object, приведенного выше. Я использую свойства width и height, чтобы задать подходящую область пространства диаграмм. При первоначальном определении объекта в теге его размеры задавались минимальными, теперь область расширяется до подходящих размеров.
  • В качестве источника данных задается объект SpreadSheet, расположенный на этой же Web-странице. Заметьте, я выполняю проверку того, не установлена ли уже связь с этим источником. Дело в том, что командная кнопка может нажиматься многократно и, следовательно, процедура может работать многократно, а попытка связи с уже присоединенным источником приводит к ошибке. Так что, когда связь уже установлена, то вызывается только метод Refresh для обновления данных источника.
  • Обратите внимание, при создании объекта cht класса WCChart я не использую метод Add для добавления нового элемента в коллекцию, поскольку один элемент этой коллекции создается автоматически. Конечно, если бы я хотел одновременно показать несколько диаграмм, без использования этого метода не обойтись.
  • На следующем этапе идет работа с уже созданным объектом cht, - задаются параметры, определяющие его элементы.
  • Первым делом, я определяю тип строящейся диаграммы. Для этого используется значение, выбранное пользователем из выадающего списка. Имя списка - SelType - задается его ID, определенным при размещении элемента на Web-странице. Конечно, я без труда мог бы дать пользователю больший набор возможных типов, что лишь слегка бы увеличило размер нашей процедуры.
  • Затем я создаю заголовок, включаю легенду и даю заголовки осям диаграммы. При этом приходится работать с различными объектами - Title, Legend, Axes, Axis и другими.
  • Наиболее важный момент - это определение данных. В данном случае я определяю три серии данных и, соответственно, задаю три элемента коллекции SeriesCollection. Поскольку источником данных является электронная таблица - объект SpreadSheet, то мне достаточно указать диапазон ячеек, где находятся данные серии.
  • На последнем шаге демонстрируется работа с отдельной серией. Для этой серии задается полиномиальный тренд.

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

Программное построение диаграммы другого типа

увеличить изображение
Рис. 10.10.  Программное построение диаграммы другого типа




Начало  Назад  Вперед