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


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

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

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

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

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

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

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

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

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

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

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

Шаги решения

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

 
 
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
 
 
ookmarkNaНАЯ
 
 
 
    BookmarkName = "НепосредственныеПодчинен_a5acb153" lumnStart As Integer
 
    ColumnStart = 2лицы для диаграммы
 
    Dim ColumnStart As Integer
 
    ColumnStart = 2   
 
    'Проверка на корректность названия привязки
е (и до конца таблицы)
 
    Dim TableForChart As Table
 
 
 
     Bkm As Bookmark 'переменная типа Закладка
 
ь названия привязки
 
 
 
    Dim BookmarkIs As Boolean  в документе
 
 
 
        If Bkm.Name = Bookжной закладки нет
 
    Dim Bkm As Bookmark       BookmarkIs = True 'опа Закладка
 
 
 
    For Each Bkm In ActiveDocument.Bookmarks привязки
 
            Set TableForChaадки в документе
 
 
 
        If Bkm.Name = BookmarkName Then        End If
 
 
 
    Next
 
 
 
'ПРОЦ с нашим именем
 
 
 
            BookmarkIs = True  есть
 
 
 
    countColumnsкладка есть
 
            чество столбцов таблицы
 
    countRows азванию привязки
 
            Set TableForChart = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)
 
        End If
 
 
 
    Next
 
 
 
umns As Range
 
    АЯ ЧАСТЬ
 
 
 
If BookmarkIs Then  DataColumns = .Range(Start:=Tabзакладка есть
 
 
 
    countColumns = TableForChart.Columns.Count     End:=TableForChart.Cell(cбцов таблицы
 
    countRows = TableForChart.Rows.Count  End With
 
 
 
    WordBaрок таблицы
 
 
 
    мму с параметрами, указанными ниже
 
 
 
        With Application.ActiveDocumeнии которых будет создана диаграмма
 
 
 
    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) alue)
 
                   ммы 17.25см
 
                Selection.ShapeRange.WrapFormat.Type = 3 унктир)
 
               круг рамки
 
                Selection.ShapeRange.Left = wdShapeCenter    
 
                    With axX.TickLabивание - по центру
 
 
 
                Set gr = Shapes(i).OLEFormat.Object.Application
 
                gr.Visible = False
 
                gr.PlotBy = XlRowCol.xlColumns                      Set axY из колонок
 
 
 
                With gr.Chart
 
 
 
                    Set axX = .Axes(XlAxisType.xlValue)
 
 
 
                                  .Font.Size = 10
 
                        .Orieя-другая (короткий пунктир)
 
                    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.Size = 10
 
                        .Orientation = xlUpward
 
                    End With
 
 
 
                    .ChartArea.Border.LineStyle = 0 нда, иначе надо писать то, что ниже
 
 ласти диаграммы
 
 
 
                     = XlLegendPosition.xlLegendPositionBottom 'снизу по центру
 
  ная, столбцы значений рядом
 
                    .ChartType = XlChartType.xlColumnClustered
 
 
 
                       'End With
 
            столбиков
 
                                
 
                Shapes(i).ConvertToInlinый
 
                    .PlotArea.Fill.Visible = False  
 
        Next iем фон
 
 
 
                        
 
End Sub

Результат

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