Это старая версия документа.


Вставка диаграммы

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

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

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

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

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

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

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

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

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

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

Шаги решения

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

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
kmarkNameНАЯ
 
    BookmarkName = "НепосредственныеПодчинен_a5acb153" umnStart As Integer
    ColumnStart = 2 'лицы для диаграммы
    Dim ColumnStart As Integer
    ColumnStart = 2 
    'Проверка на корректность названия привязки
 
  е (и до конца таблицы)
    Dim TableForChart As Table
 
    m As Bookmark 'переменная типа Закладка
 
   ь названия привязки
 
    Dim BookmarkIs As Boolean документе
 
        If Bkm.Name = BookmarkNжной закладки нет
    Dim Bkm As Bookmark BookmarkIs = True 'отмечаепа Закладка
 
    For Each Bkm In ActiveDocument.Bookmarks зки
            Set TableForChart = Aадки в документе
 
        If Bkm.Name = BookmarkName Then   End If
 
    Next
 
'ПРОЦЕДУРНАЯ Ч с нашим именем
 
            BookmarkIs = True  
    countColumns = TableForкладка есть
            лбцов таблицы
    countRows = TableForCазванию привязки
            Set TableForChart = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)
        End If
 
    Next
 
ange
 
    With АЯ ЧАСТЬ
 
If BookmarkIs Then ns = .Range(Start:=TableForChartзакладка есть
 
    countColumns = TableForChart.Columns.Count TableForChart.Cell(countRows,бцов таблицы
    countRows = TableForChart.Rows.Count     
    WordBasic.InsertChрок таблицы
 
    метрами, указанными ниже
 
        With Application.ActiveDocument
 
нии которых будет создана диаграмма
 
    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                                 
                Setетрами, указанными ниже
 
        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                  axX.Majкруг рамки
                Selection.ShapeRange.Left = wdShapeCenter             With axX.TickLabels
         ивание - по центру
 
                Set gr = Shapes(i).OLEFormat.Object.Application
                gr.Visible = False
                gr.PlotBy = XlRowCol.xlColumns       Set axY = .Axes(XlAxis из колонок
 
                With gr.Chart
 
                    Set axX = .Axes(XlAxisType.xlValue)
 
                     .Font.Size = 10
                        .Orientation = xlUpя-другая (короткий пунктир)
                    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
  'цвет общего фона диаграммы
                    '.Charрный"
                        .Font.Size = 10
                        .Orientation = xlUpward
                    End With
 
                    .ChartArea.Border.LineStyle = 0 до писать то, что ниже
               ласти диаграммы
 
                     ition.xlLegendPositionBottom 'снизу по центру
                ная, столбцы значений рядом
                    .ChartType = XlChartType.xlColumnClustered
 
 
      столбиков
                                 Shapes(i).ConvertToInlineShape
          ый
                    .PlotArea.Fill.Visible = False       
    End Wiем фон
 
 

Результат

Рисунок 2. Вид сформированного отчета
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki