Command disabled: recent


Вставка диаграммы на основе цифровых данных

Текущая ситуация

Для вывода диаграмм в отчеты используется привязка типа "Файл". При этом выводятся диаграммы, которые уже существуют в базе данных (диаграмма единиц деятельности, оргструктуры). Не существует привязок, которые строили бы различные диаграммы (графики, столбчатые диаграммы) на основе цифровых данных модели бизнес-архитектуры. Для решения подобных задач могут использоваться средства MS Word.

Постановка задачи

В статическом отчете формата Word необходимо вывести диаграмму с отображением количества непосредственно подчиненных должностей. Исходная информация для построения диаграммы будет представлена в таблице, формируемой привязкой.

Исходные данные

Решение описывается с момента, когда в шаблоне отчета существует таблица – привязка типа "Фильтр" с отображением необходимых данных.

Рисунок 1. Вид шаблона отчета

Концепция решения

На основе таблицы необходимо построить диаграмму. Т.е. необходимо написать код, который вручную делался бы так:

  1. Выделить необходимые столбцы таблицы.
  2. Лента "Вставка", группа "Иллюстрации", кнопка "Диаграмма".
  3. Вызвать контекстное меню от диаграммы, меню "Объект Диаграмма", пункт "Изменить" и настроить по своему усмотрению.

Шаги решения

Все решение сводится к написанию макроса.



Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

    

'ВВОДНАЯ

    

    BookmarkName = "НепосредственныеПодчинен_a5acb153" 'название привязки-таблицы для диаграммы

    Dim ColumnStart As Integer

    ColumnStart = 2 'с какого столбца брать данные (и до конца таблицы)

    Dim TableForChart As Table

    

    'Проверка на корректность названия привязки



    Dim BookmarkIs As Boolean 'сначала считаем, что нужной закладки нет

    Dim Bkm As Bookmark 'переменная типа Закладка



    For Each Bkm In ActiveDocument.Bookmarks 'перебираем все закладки в документе



        If Bkm.Name = BookmarkName Then 'если нашли закладку с нашим именем



            BookmarkIs = True 'отмечаем, что закладка есть

            'получаем таблицу по названию привязки

            Set TableForChart = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)

        End If

 

    Next

 

'ПРОЦЕДУРНАЯ ЧАСТЬ



If BookmarkIs Then 'если в документе закладка есть

    

    countColumns = TableForChart.Columns.Count 'количество столбцов таблицы

    countRows = TableForChart.Rows.Count ' количество строк таблицы

    

    'Выделяем нужные столбцы таблицы, на основании которых будет создана диаграмма

    

    Dim DataColumns As Range

    

    With ActiveDocument

        Set DataColumns = .Range(Start:=TableForChart.Cell(1, ColumnStart).Range.Start, _

                                    End:=TableForChart.Cell(countRows, countColumns).Range.End)

        DataColumns.Select

    End With

    

    WordBasic.InsertChart 'вставляем диаграмму с параметрами, указанными ниже

    

        With Application.ActiveDocument

        

        For i = 1 To Shapes.Count

        

            If (Shapes(i).Type = msoEmbeddedOLEObject) Then

                

                Shapes(i).Width = MillimetersToPoints(172.5) 'ширина диаграммы 17.25см

                Selection.ShapeRange.WrapFormat.Type = 3 'обтекание вокруг рамки

                Selection.ShapeRange.Left = wdShapeCenter 'горизонтальное выравнивание - по центру

                                

                Set gr = Shapes(i).OLEFormat.Object.Application

                gr.Visible = False

                gr.PlotBy = XlRowCol.xlColumns  'данные берутся из колонок

                

                With gr.Chart

                

                    Set axX = .Axes(XlAxisType.xlValue)

                    

                    'горизонтальные линии сетки-линия-другая (короткий пунктир)

                    axX.MajorGridlines.Border.LineStyle = XlLineStyle.xlDot

                    

                    With axX.TickLabels

                        .AutoScaleFont = False

                        .Font.FontStyle = "полужирный"

                        .Font.Size = 12

                    End With

                                    

                    Set axY = .Axes(XlAxisType.xlCategory)

                    With axY.TickLabels

                        .AutoScaleFont = False

'                        .Font.FontStyle = "полужирный"

                        .Font.Size = 10

                        .Orientation = xlUpward

                    End With

                    

                    .ChartArea.Border.LineStyle = 0 'без рамки для всей области диаграммы

                                

                     'гистограмма столбиковая, не объемная, столбцы значений рядом

                    .ChartType = XlChartType.xlColumnClustered

                    

                    'цвет фона для столбиков

                    '.PlotArea.Interior.Color = RGB(255, 255, 255) 'белый

                    .PlotArea.Fill.Visible = False 'или удаляем фон



                    'цвет общего фона диаграммы

                    '.ChartArea.Interior.Color = RGB(255, 255, 255) 'белый

                    .ChartArea.Fill.Visible = False 'или удаляем

                       

                    .Legend.Delete 'не нужна легенда, иначе надо писать то, что ниже

                    'With .Legend 'настройка легенды

                       '.Position = XlLegendPosition.xlLegendPositionBottom 'снизу по центру

                       '.AutoScaleFont = False

                       '.Font.FontStyle = "полужирный"

                       '.Font.Size = 9

                    'End With

                    

                End With

                

                Shapes(i).ConvertToInlineShape

                

            End If

            

        Next i

        

    End With



End If

    

End Sub


Результат

Рисунок 2. Вид сформированного отчета
« ПредыдущаяНа уровень вышеСледующая »
 
Driven by DokuWiki