Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 19 авг 2017, 22:42

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 77 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 24 сен 2016, 10:50 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день !

Буду очень благодарен за помощь в решении задачи:
1. Есть схемы в формате "визио" с указанием адресов (это текстовые поля) элементов схемы. (Схема1)
2. Есть таблица соответствия неправильного текста - правильному, колонки А и В соответственно.
Можно ли автоматизировать процесс поиска в нескольких схемах текста из колонки А и их замену на текст из колонки В ?
Дополнено позднее: Тема получила свое продолжение в ветках обсуждения:
Find&Replace Addon For MS Visio
Скорость обработки документов Visio из Excel


Вложения:
1.rar [32.61 Кб]
Скачиваний: 16
IP адреса.xlsx [8.79 Кб]
Скачиваний: 22


Последний раз редактировалось Surrogate 20 фев 2017, 00:31, всего редактировалось 1 раз.
добавлены ссылки на родственные ветки
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 25 сен 2016, 13:33 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Вот нагуглил по перебору всех шейпов.
На схемах действительно всякое бывает.

Спойлер: показать
Здесь происходит перебор всех шейпов всех страниц с любой степенью вложенности в группах.
Запускать процедуру "a()". Все шейпы выводятся в окно Immediate:

Код:
Dim sh As Visio.Shape
    Dim pg As Visio.Page
    Dim coll As New Collection

    For Each pg In ThisDocument.Pages
        For Each sh In pg.Shapes
            If sh.Shapes.Count>0 Then
                Recursion sh.Shapes, coll
            End If
            coll.add sh
        Next sh
    Next pg
    For Each sh In coll
         Debug.Print sh.NameID
    Next sh
End Sub

Sub Recursion(ByVal shps As Visio.Shapes, coll As Collection)
    Dim sh As Visio.Shape
    For Each sh In shps
        If sh.Shapes.Count>0 Then
            Recursion sh.Shapes, coll 'здесь происходит вызов самой себя
        End If
        coll.add sh
    Next sh
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 25 сен 2016, 13:40 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 880
Очков репутации: 100576

Добавить очки репутацииУменьшить очки репутации
Ну, уж если рассматривать все, что бывает, то надо вспомнить о гиперлинках, Custom properties...
А может быть еще и такой случай, что во всех документах нужно заменить Петрова на Сидорова, а вот в последнем не нужно. Или в шейпах типа "Штамп" не менять, а в шейпах типа "Владелец" менять.
То есть в общем случае нужен настраиваемый процессор.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 25 сен 2016, 13:57 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Тогда может первым делом в файле ВСЁ разгруппировать ?
Чтобы сюрпризы не оставались.
Это можно сделать ?

Тем более, что исходный файл мы оставляем, а измененный сохраняем с другим именем.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 25 сен 2016, 14:06 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 880
Очков репутации: 100576

Добавить очки репутацииУменьшить очки репутации
Цитата:
Тогда может первым делом в файле ВСЁ разгруппировать ?

Здесь все зависит от того, что это за файлы. В некоторых действительно можно все разгруппировать безболезненно. Но таких очень мало. Чаще всего изображение при этом искажается. А функциональность тем более.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 25 сен 2016, 20:51 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Сделал ведение лога при работе макроса. Только прежде нужно создать пустой файл Log.txt в целевой папке.
Скачать файл - IP адреса.zip
https://yadi.sk/d/qbpj9WI9d2eqF


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 10:05 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Добавил простенькую "визуализацию". Качать там же.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 15:30 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3362
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Tumanov писал(а):
Так сказать, совместим с процессом обучения. Глядишь, еще кому-то пригодится.
что-то я процесса обучения не увидел в этой ветке обсуждения ? Изображение
Константин Кинчев в песне Все это рок-н-ролл писал(а):
Где воспитательный фактор?
Где вера в светлую даль?
топик-стартер не успевал даже тестить предложенные коды, как появлялись новые !
AlexDen писал(а):
Спасибо всем за горячую поддержку !
Вы быстрее пишете код, чем я его проверять успеваю
в общем помучиться топик-стартеру таки не дали в решении данной задачи ! одна надежда, если топикстартеру захочется
Tumanov писал(а):
еще что-то добавить, усовершенствовать. Понятно, что это можно делать до бесконечности...
придется разбираться с полученным "на шару" некомментированным кодом Изображение
AlexDen писал(а):
Вот нагуглил по перебору всех шейпов.
На схемах действительно всякое бывает.
PS кстати не помешало бы ссылочку дать на первоисточник
9rey в сообщении #1863 писал(а):
Использование приема рекурсии.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 17:03 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 880
Очков репутации: 100576

Добавить очки репутацииУменьшить очки репутации
Кстати, упоминалось где-то вначале о макросе в Visio...
Провел вот такой эксперимент.
Сделал в файле 20 000 шейпов. Сделал три копии файла.
Вариант 1. Запускаю обработку из Excel
Код:
        Debug.Print Time()
        s = ""
        For Each Shp In doc.Pages(1).Shapes
            s = s & Shp.Text
        Next
        Debug.Print Time()

Вариант 2. Запускаю из Excel макрос в Visio, который делает ту же обработку.
Код:
        Debug.Print Time()
        Call doc.Start
        Debug.Print Time()

Сравниваю данные в протоколе
Код:
Доступ к шейпам из Excel
Имя документа = doc1.vsd
15:16:24
15:16:32
Имя документа = doc2.vsd
15:16:38
15:17:01
Имя документа = doc3.vsd
15:17:07
15:17:30
Доступ к шейпам макросом из Visio
Имя документа = doc1.vsd
15:17:37
15:17:51
Имя документа = doc2.vsd
15:17:57
15:18:12
Имя документа = doc3.vsd
15:18:18
15:18:33
Конец работы

И получается, что обработка в Visio идет почти в два раза быстрее, чем удаленно из Excel. (14 сек против 24 сек)
(Правда, первый документ из всей цепочки обрабатывается гораздо быстрее. Я пока не понял, почему. Но это так, побочный эффект)
Я, правда, ожидал, что эффект будет еще больше, но и в два раза - это тоже полезно.
Тогда получается, что если обработчик (код) сунуть в трафарет. Первым документом открывать этот трафарет. И потом, перебирая документы, обращаться из Excel к макросу в трафарете, то скорость можно повысить почти в два раза.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 17:14 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 880
Очков репутации: 100576

Добавить очки репутацииУменьшить очки репутации
А "побочный эффект" тоже интересен.
В только что созданном Application первый документ обрабатывается за 8 сек, а все остальные - по 24 сек.
Вот и думай после этого, а стоит ли Application держать открытым :)
Вообще, процесс заслуживает того, чтобы промерить его более качественно от начала до конца, со всеми промужуточными этапами.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 17:37 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Скорость конечно важный показатель, "лучше пол дня потерять, потом за пол часа долететь" ...
Но на первом же сгруппированном шейпе - облом, программа не увидела, что есть текст для замены.

Сегодня специально посмотрел на боевых файлах - много группировок. Некоторые схемы (потому,что это практически шаблон) затаскивают на пустой лист и правят текст без разгруппировки.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 17:57 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 880
Очков репутации: 100576

Добавить очки репутацииУменьшить очки репутации
Цитата:
Скорость конечно важный показатель

Так кому что интересно, тот тем и занимается :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 19:12 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
AlexDen, ну-ка попробуй. Я сделал обработку сгруппированных шейпов.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 20:24 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Вроде сработало ! Я правда на скорую руку всего парочку объединил.

Обнаружил другую неприятность
текст : Ответственный Иванов 89131234567 заменяет на
текст : Ответственный Петров 89131234567

если сделать
Ответственный 8-913-987-65-43 Иванов, то заменяет на
Ответственный 8-913-987-65-43 Петров

цифры игнорирует в любом месте


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 20:59 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Подобного рода неприятность я предполагал стопроцентно. Ведь у тебя фамилии и телефоны находятся в разных строках таблицы. То есть это как бы разные данные. А в шейпах они представлены одной строкой. А строка в шейпе сравнивается со строками таблицы только по 1 разу. Вот один раз и меняет. Видимо фамилии идут раньше телефонов. Попробуй запустить макрос еще раз по файлам (которые уже с приставкой - new).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 21:02 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Это конечно не выход. Если в шейпе кроме фамилии и телефона будет и ip, то надо будет и третий раз запускать макрос.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 26 сен 2016, 21:16 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Или вот что. В процедуре ReplaceShapeText закомментируй строку
Код:
Exit For ' после замены выходим из цикла

Но это замедлит выполнение макроса.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 27 сен 2016, 10:24 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Так. Сделал тот же макрос, но в файле .vsd. Скачай архив 'Замена текста.zip'. Там и файл 'Ip адреса.xlsm' то же есть, подкорректированный. Надо тебе попробовать оба файла запустить на рабочих документах. И смотреть какой быстрее будет. Вот прямо с секундомером "в руках". Выводы какой использовать файл - сам решишь.

Важно:
Если в шейпах будут строки типа "Ответственный Иванов 10.255.0.10", то будет косяк. В таблице есть адрес для замены и 10.255.0.1 и 10.255.0.10. Поскольку 10.255.0.1 идет первым, то результат будет - "Ответственный Петров 10.221.0.110". А такого адреса (10.221.0.110) не существует. Как с этим бороться - не знаю. Вернее знаю, но это вообще уж костылина будет, и очень медленная. Ну а если в шейпе только ip адрес, то нормально работает. Так что смотри.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 27 сен 2016, 10:37 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Я написал:
Цитата:
Как с этим бороться - не знаю. Вернее знаю, но это вообще уж костылина будет, и очень медленная.


Пошел курить и тут же мысля возникла. Надо попробовать. Но это ближе к вечеру.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 27 сен 2016, 14:05 
Не в сети
Ветеран

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 428
Использую Visio c: 2008
Очков репутации: 97

Добавить очки репутацииУменьшить очки репутации
Ну надеюсь последний вариант. Поменял концепцию немного. Скачай заново 'Замена текста.zip'.
Запускать файл ReplaceText.vsd.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Замена текста в нескольких файлах по таблице соответствия
СообщениеДобавлено: 27 сен 2016, 18:02 
Не в сети
Новичок

Зарегистрирован: 24 сен 2016, 10:28
Сообщений: 22
Использую Visio c: 2014
Уровнь квалификации: пока плохо
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Идея интересная, потестил и понял, что против человеческого фактора программы, видимо бессильны.
1. в тексте может быть разное количество пробелов
2. мне показалось, что более корректно работает, если брать текст ячейки эксел целиком, так можно перечислить возможные варианты написания телефонов
3. встречаются грамматические ошибки в написании фамилий
4. видимо может быть что-то еще.

Необычайно радует, что основная задача замена IP адресов работает !

Описать разбор текста затрудняюсь, но примерно понятно из лога (я его откомментировал)
Цитата:
Начало записи: 27.09.2016 20:08:03 ' певый запуск

Документ: C:\testFOLDERtest\Схема1.vsd
Лист: Page-1 (на листе есть объединение шейпов)

Sheet.10: 10.255.0.1 > 10.221.55.55 ' адреса поменял ОТЛИЧНО ВЕЗДЕ (далее не комментируется)
Sheet.15: 10.255.0.2 > 10.221.66.66
Sheet.17: 10.255.0.3 > 10.221.77.77
Sheet.23: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > +7-999-888-77-77 ' заменил ТОЛЬКО телефон ,

Лист: Page-2 (на листе есть объединение шейпов)
Sheet.10: 10.255.0.11 > 10.221.11.11
Sheet.15: Ответственный 913-666-55-44 Иванов И.И. > 8-913-333-22-11 ' поменял ТОЛЬКО телефон
Sheet.11: 10.255.0.22 > 10.221.22.22
Sheet.12: 10.255.0.33 > 10.221.33.33
Sheet.16: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > +7-999-888-77-77 ' поменял ТОЛЬКО телефон

Лист: Page-3 (на листе нет объединения шейпов)
Sheet.10: 10.255.255.252 > 10.221.0.01
Sheet.15: 10.255.255.253 > 10.221.0.02
Sheet.22: Ответственный 913-666-55-44 Иванов И.И. > 8-913-333-22-11 ' поменял ТОЛЬКО телефон
Sheet.17: 10.255.255.254 > 10.221.0.03
Sheet.23: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > +7-999-888-77-77 ' поменял ТОЛЬКО телефон
Добавил в таблицу эксел строки
Цитата:
Иванов Петров
И.И. П.П.
Пупкина Шмупкина
Ж.Ж. З.З.
и запустил тот же файл
Цитата:
Начало записи: 27.09.2016 20:17:21

Документ: C:\testFOLDERtest\Схема1.vsd

Лист: Page-1 (на листе есть объединение шейпов)
Sheet.10: 10.255.0.1 > 10.221.55.55
Sheet.22: Ответственный 81234567899 Иванов И.И. > Петров
Sheet.15: 10.255.0.2 > 10.221.66.66
Sheet.17: 10.255.0.3 > 10.221.77.77
Sheet.23: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > З.З. 'заменил только отчество
Sheet.23: Ответственный Пупкина З.З. +7-234-567-89-00 > +7-999-888-77-77 ' поменял ТОЛЬКО телефон

Лист: Page-2 (на листе есть объединение шейпов)
Sheet.10: 10.255.0.11 > 10.221.11.11
Sheet.15: Ответственный 913-666-55-44 Иванов И.И. > 8-913-333-22-11
Sheet.15: Ответственный 8-913-333-22-11 Иванов И.И. > Петров 'заменил только фамилию
Sheet.11: 10.255.0.22 > 10.221.22.22
Sheet.12: 10.255.0.33 > 10.221.33.33
Sheet.16: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > З.З. 'заменил только отчество
Sheet.16: Ответственный Пупкина З.З. +7-234-567-89-00 > +7-999-888-77-77

Лист: Page-3 (на листе нет объединения шейпов)
Sheet.10: 10.255.255.252 > 10.221.0.01
Sheet.15: 10.255.255.253 > 10.221.0.02
Sheet.22: Ответственный 913-666-55-44 Иванов И.И. > 8-913-333-22-11
Sheet.22: Ответственный 8-913-333-22-11 Иванов И.И. > Петров
Sheet.17: 10.255.255.254 > 10.221.0.03
Sheet.23: Ответственный Пупкина Ж.Ж. +7-234-567-89-00 > З.З.
Sheet.23: Ответственный Пупкина З.З. +7-234-567-89-00 > +7-999-888-77-77
Адреса IP и телефоны меняет совершенно верно


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 77 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB