Различия

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

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

ru:creating_user_reports:use_macros_in_reports:examples:without_tunnel [2020/07/21 03:17]
192.168.1.126 удалено
— (текущий)
Строка 1: Строка 1:
-====== Замена в таблицах текста "{Туннель}" ====== 
- 
-===== Текущая ситуация ===== 
- 
-При графическом описании бизнес-процесса допускается туннелирование стрелок. Откуда именно пришли такие стрелки или куда уходят, явно не указывается. В отчетах такие состояния стрелок вместо конкретных процессов обозначают текстом  "{Туннель}". 
- 
-{Туннель} -- поставщик или потребитель стрелки. Название не детализируется в случаях однозначного понимания читателями диаграммы. 
- 
-===== Постановка задачи ===== 
- 
-В отчете формата Word по процессу необходимо во всех таблицах, где встречается текст "{Туннель}", сделать его замену на "---". Допускается, что за границами таблиц так же может встречаться этот текст, но его изменять не следует. 
- 
-===== Исходные данные ===== 
- 
-Решение описывается с момента, когда существует шаблон отчета по процессу. В шаблоне существуют таблицы (различные привязки), которые содержат информацию по входам и выходам стрелок. 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:without_tunnel:lang_tunnel1.png?nolink | Рисунок 1. Вид шаблона отчета с таблицами, которые могут выводить заданный текст }}] 
- 
-[{{ ru:creating_user_reports:use_macros_in_reports:without_tunnel:lang_tunnel2.png?nolink |Рисунок 2. Вид выполненного отчета с искомым текстом в некоторых ячейках}}] 
- 
-===== Концепция решения ===== 
- 
-Так как проводить замену текста следует только в таблицах (причем в таблицах разных привязок), то необходимо определиться с признаками таблиц, в которых будет производиться изменение. Таким признаком было выбрано число столбцов в таблицах. 
- 
-Чтобы сократить время работы макроса, так же определимся сразу с номером столбца, в котором необходимо производить изменения в случае необходимости. 
- 
-Проходя по всем таблицам документа, будет происходить сравнение количества столбцов выбранной таблицы. Если таблица подходит, то будет проход по каждой ячейке нужной таблицы в поисках текста для замены и, в случае необходимости, будет происходить замена текста. 
- 
-===== Шаги решения ===== 
- 
-Количество столбцов нужных нам таблиц -- 5. Изменения возможны в 5м столбце таких таблиц. 
- 
-<code> 
- 
-Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 
- 
-'Вводная часть 
- 
-    columnTableProc = 5 'кол-во столбцов в таблицах с процессами 
-    columnChange = 5 'столбец, в котором необходимо производить изменения 
- 
-    tunnelText = "{Туннель}" 'искомый текст для замены 
-    newText = "---" 'текст для замены    
- 
-'Процедурная часть 
- 
-    tableCount = ActiveDocument.Tables.Count 'кол-во таблиц в документе             
- 
-    For iTable = 1 To tableCount 'проходим по всем таблицам документа 
- 
-        'поочередно обращаемся к каждой таблице 
-         Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=iTable, Name:="" 
- 
-        If Selection.Tables(1).Columns.Count = columnTableProc Then 'если в таблице по процессам 
- 
-            countRow = Selection.Tables(1).Rows.Count 'кол-во строк в таблице 
- 
-            For i = 2 To countRow 'проходим по всем строкам таблицы, кроме заголовка 
- 
-                On Error Resume Next 'игнор error 5991, если какие-то ячейки имеют вертикальное объединение 
- 
-                CellText = Selection.Tables(1).Cell(i, columnChange).Range.Text 'текст в ячейке нужного столбца 
-                CellText = Left$(CellText, (Len(CellText) - 2)) 'удаляем 2 последних символа - чистый текст 
- 
-                If Len(CellText) <> 0 Then 'если ячейка непустая 
- 
-                    If CellText = tunnelText Then 'если это текст для замены 
- 
-                        'тогда задаем новое значение для ячейки 
- 
-                        Selection.Tables(1).Cell(i, columnChange).Range.Text = newText 
- 
-                    End If 
- 
-                End If 
- 
-            Next i 
- 
-        End If 
- 
-    Next iTable 
- 
-End Sub 
- 
-</code> 
- 
-===== Результат ===== 
-[{{ ru:creating_user_reports:use_macros_in_reports:without_tunnel:lang_tunnel3.png?nolink |Рисунок 3. Вид сформированного отчета после работы макроса}}]  
- 
- 
- 
- 
- 
-[<contextnavigator>] 
- 
  
Driven by DokuWiki