Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
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. Вид сформированного отчета}}] | + |