Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

ru:creating_user_reports:use_macros_in_reports:chart_insert [2013/10/16 16:02]
127.0.0.1 внешнее изменение
— (текущий)
Строка 1: Строка 1:
-====== Вставка диаграммы ======  +
-  +
-===== Текущая ситуация =====  +
-  +
-Для вывода графических схем в отчеты используется привязка типа "Файл". При этом выводится графика, которая уже существует в бизнес-модели (диаграмма процессов, оргструктуры). Не существует привязок, которые бы выводили различные диаграммы на основе цифровых данных бизнес-модели. Для решения подобных задач могут использоваться средства MS Word.  +
-  +
-===== Постановка задачи =====  +
-  +
-В статическом отчете формата Word необходимо вывести диаграмму с отображением количества непосредственно подчиненных должностей. Исходная информация для построения диаграммы будет представлена в таблице, формируемой привязкой.  +
-  +
-===== Исходные данные =====  +
-  +
-Решение описывается с момента, когда в шаблоне отчета существует таблица -- привязка типа "Фильтр" с отображением необходимых данных.  +
-  +
-[{{ ru:creating_user_reports:use_macros_in_reports:chart_insert:chart1.png?nolink |Рисунок 1. Вид шаблона отчета}}]  +
-  +
-===== Концепция решения =====  +
-  +
-На основе таблицы необходимо построить диаграмму. Т.е. необходимо написать код, который вручную делался бы так:  +
-  - Выделить необходимые столбцы таблицы  +
-  - Лента "Вставка", группа "Иллюстрации", кнопка "Диаграмма"  +
-  - Контекстное меню по диаграмме, меню "Объект Диаграмма", пункт "Изменить" и настроить по своему усмотрению  +
-  +
-===== Шаги решения =====  +
-  +
-Все решение сводится к написанию макроса.  +
-  +
-<code vb>  +
-  +
-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  +
-  +
-</code>  +
-  +
-===== Результат =====  +
-  +
-[{{ ru:creating_user_reports:use_macros_in_reports:chart_insert:chart2.png?nolink |Рисунок 2. Вид сформированного отчета}}]+
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki