Форум пользователей Visio http://visio.getbb.ru/ |
|
Замена текста в нескольких файлах по таблице соответствия http://visio.getbb.ru/viewtopic.php?f=6&t=1024 |
Страница 3 из 4 |
Автор: | AlexDen [ 24 сен 2016, 10:50 ] | |||
Заголовок сообщения: | Замена текста в нескольких файлах по таблице соответствия | |||
Добрый день ! Буду очень благодарен за помощь в решении задачи: 1. Есть схемы в формате "визио" с указанием адресов (это текстовые поля) элементов схемы. (Схема1) 2. Есть таблица соответствия неправильного текста - правильному, колонки А и В соответственно. Можно ли автоматизировать процесс поиска в нескольких схемах текста из колонки А и их замену на текст из колонки В ? Дополнено позднее: Тема получила свое продолжение в ветках обсуждения:
Find&Replace Addon For MS Visio Скорость обработки документов Visio из Excel
|
Автор: | AlexDen [ 25 сен 2016, 13:33 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Вот нагуглил по перебору всех шейпов. На схемах действительно всякое бывает. Содержимое спрятано под спойлер ↓ Спойлер: ▼ |
Автор: | Tumanov [ 25 сен 2016, 13:40 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Ну, уж если рассматривать все, что бывает, то надо вспомнить о гиперлинках, Custom properties... А может быть еще и такой случай, что во всех документах нужно заменить Петрова на Сидорова, а вот в последнем не нужно. Или в шейпах типа "Штамп" не менять, а в шейпах типа "Владелец" менять. То есть в общем случае нужен настраиваемый процессор. |
Автор: | AlexDen [ 25 сен 2016, 13:57 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Тогда может первым делом в файле ВСЁ разгруппировать ? Чтобы сюрпризы не оставались. Это можно сделать ? Тем более, что исходный файл мы оставляем, а измененный сохраняем с другим именем. |
Автор: | Tumanov [ 25 сен 2016, 14:06 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Цитата: Тогда может первым делом в файле ВСЁ разгруппировать ? Здесь все зависит от того, что это за файлы. В некоторых действительно можно все разгруппировать безболезненно. Но таких очень мало. Чаще всего изображение при этом искажается. А функциональность тем более. |
Автор: | Shishok [ 25 сен 2016, 20:51 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Сделал ведение лога при работе макроса. Только прежде нужно создать пустой файл Log.txt в целевой папке. Скачать файл - IP адреса.zip https://yadi.sk/d/qbpj9WI9d2eqF |
Автор: | Shishok [ 26 сен 2016, 10:05 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Добавил простенькую "визуализацию". Качать там же. |
Автор: | Surrogate [ 26 сен 2016, 15:30 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Tumanov писал(а): Так сказать, совместим с процессом обучения. Глядишь, еще кому-то пригодится. что-то я процесса обучения не увидел в этой ветке обсуждения ? Константин Кинчев в песне Все это рок-н-ролл писал(а): Где воспитательный фактор? топик-стартер не успевал даже тестить предложенные коды, как появлялись новые !Где вера в светлую даль? AlexDen писал(а): Спасибо всем за горячую поддержку ! в общем поВы быстрее пишете код, чем я его проверять успеваю Tumanov писал(а): еще что-то добавить, усовершенствовать. Понятно, что это можно делать до бесконечности... придется разбираться с полученным "на шару" некомментированным кодом AlexDen писал(а): Вот нагуглил по перебору всех шейпов. PS кстати не помешало бы ссылочку дать на первоисточник На схемах действительно всякое бывает. 9rey в сообщении #1863 писал(а): Использование приема рекурсии.
|
Автор: | Tumanov [ 26 сен 2016, 17:03 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Кстати, упоминалось где-то вначале о макросе в 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 к макросу в трафарете, то скорость можно повысить почти в два раза. |
Автор: | Tumanov [ 26 сен 2016, 17:14 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
А "побочный эффект" тоже интересен. В только что созданном Application первый документ обрабатывается за 8 сек, а все остальные - по 24 сек. Вот и думай после этого, а стоит ли Application держать открытым Вообще, процесс заслуживает того, чтобы промерить его более качественно от начала до конца, со всеми промужуточными этапами. |
Автор: | AlexDen [ 26 сен 2016, 17:37 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Скорость конечно важный показатель, "лучше пол дня потерять, потом за пол часа долететь" ... Но на первом же сгруппированном шейпе - облом, программа не увидела, что есть текст для замены. Сегодня специально посмотрел на боевых файлах - много группировок. Некоторые схемы (потому,что это практически шаблон) затаскивают на пустой лист и правят текст без разгруппировки. |
Автор: | Tumanov [ 26 сен 2016, 17:57 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Цитата: Скорость конечно важный показатель Так кому что интересно, тот тем и занимается |
Автор: | Shishok [ 26 сен 2016, 19:12 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
AlexDen, ну-ка попробуй. Я сделал обработку сгруппированных шейпов. |
Автор: | AlexDen [ 26 сен 2016, 20:24 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Вроде сработало ! Я правда на скорую руку всего парочку объединил. Обнаружил другую неприятность текст : Ответственный Иванов 89131234567 заменяет на текст : Ответственный Петров 89131234567 если сделать Ответственный 8-913-987-65-43 Иванов, то заменяет на Ответственный 8-913-987-65-43 Петров цифры игнорирует в любом месте |
Автор: | Shishok [ 26 сен 2016, 20:59 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Подобного рода неприятность я предполагал стопроцентно. Ведь у тебя фамилии и телефоны находятся в разных строках таблицы. То есть это как бы разные данные. А в шейпах они представлены одной строкой. А строка в шейпе сравнивается со строками таблицы только по 1 разу. Вот один раз и меняет. Видимо фамилии идут раньше телефонов. Попробуй запустить макрос еще раз по файлам (которые уже с приставкой - new). |
Автор: | Shishok [ 26 сен 2016, 21:02 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Это конечно не выход. Если в шейпе кроме фамилии и телефона будет и ip, то надо будет и третий раз запускать макрос. |
Автор: | Shishok [ 26 сен 2016, 21:16 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Или вот что. В процедуре ReplaceShapeText закомментируй строку Код: Exit For ' после замены выходим из цикла Но это замедлит выполнение макроса. |
Автор: | Shishok [ 27 сен 2016, 10:24 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Так. Сделал тот же макрос, но в файле .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 адрес, то нормально работает. Так что смотри. |
Автор: | Shishok [ 27 сен 2016, 10:37 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Я написал: Цитата: Как с этим бороться - не знаю. Вернее знаю, но это вообще уж костылина будет, и очень медленная. Пошел курить и тут же мысля возникла. Надо попробовать. Но это ближе к вечеру. |
Автор: | Shishok [ 27 сен 2016, 14:05 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Ну надеюсь последний вариант. Поменял концепцию немного. Скачай заново 'Замена текста.zip'. Запускать файл ReplaceText.vsd. |
Автор: | AlexDen [ 27 сен 2016, 18:02 ] |
Заголовок сообщения: | Re: Замена текста в нескольких файлах по таблице соответствия |
Идея интересная, потестил и понял, что против человеческого фактора программы, видимо бессильны. 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 Адреса IP и телефоны меняет совершенно верно
Документ: 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 |
Страница 3 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |