Различия

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

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

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