Как стать автором
Обновить

VBA, Word: перекрёстные ссылки согласно ГОСТ (убираем из текста паразитные названия «Рисунок..», «Таблица..» и тп)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров8K
Всего голосов 8: ↑7 и ↓1+9
Комментарии35

Комментарии 35

В чужой ворд со своим уставом не ходят. В упоминаем госте есть смысл, или он как большинство регуляций сделан чтобы жизнь мёдом не казалась, а руководство внушительней - соответственно казалось? Вариант решить проблему посредством подгона требований к дефолтным настройкам самого популярного в отрасли редактора рассматривался? Как минимум пользователям - тем кто бОльшую часть времени в нём проводит было бы удобнее. А удобство это не блажь, а продуктивность, уменьшение ошибок и прочая, прочая, прочая.

Ну, гост призывает применять нормы русского языка при оформлении документов. Если не использовать данный подход, то по дефолту в word при использовании автообновляемых перекрёстных ссылок получаем конструкции типа "...посмотрите на рисунок Рисунок 15..." или "...это видно из рисунков Рисунок 12 - Рисунок 15..."

Если вас (и вашего заказчика) это не смущает, то всё ок. А если всё-таки хочется чтобы текст читался гладко и не создавалось впечатления, что его писали какие-то безграмотные люди - то лучше использовать предложенный скрипт.

К тому же я написал статью по просьбе одного из читателей, который в переписке как раз поднял эту проблему, и оказалось что у меня есть для него решение, которым я и делюсь со всеми. )

Тут проблема не в том, что подо что подгоняться должно, а в том, что долгое время вообще на этот вопрос забили, от слова совсем, потому и приходится колхозить на том что уже стало привычным, под отечественный реалии.
Кстати говоря, я сейчас довольно глубоко погружён в тему импортозамещения в области офисных пакетов, и там так же идёт в большинстве своем просто копирование самого популярного офисного пакета. Тоже самое и в отечественных CAD системах. Требования ЕСКД там не зашитваются, а надстраиваются поверх. С одной стороны - понятно, если рассматриваешь свой продукт как продаваемый и за пределами страны, с другой, по идее приоритет внутреннего рынка должен быть.

Не могу оценить перспективы продаж за пределами страны, продуктов которые должны импортозамещать офисные пакеты…

Делают громкие заявления:

Нашей основной целью было заместить Microsoft с учётом возможности совместной работы в вебе и соответствием всех требований ГОСТа.

(пруф)

Но в камментах признают, что этого пока нет в реале…

Ну, может вы конечно не в курсе, но долгое время, отечественные разработчики вполне всего позиционировали свои продукты для продаж за границу (и делали это вполне успешно). Более того, до сих пор, часть ПО сперва создаётся под заграничных клиентов, и только потом обновы на отечественные ветки накатываются.

Действительно, я про такое слышу в первые…
А каких конкретно разработчиков вы имеете в виду?

Хабро-статья из 2015 года Российский сервис «МойОфис» будет конкурировать с Microsoft Office и Google Docs

К 2020 году компания хочет получить 25% отечественного рынка и выйти на рынки Европы и Латинской Америки.

К 2020 году разработчики сервиса планируют получить долю в 20% на рынке Бразилии и Латинской Америки и до 10% на европейском рынке. За пределами России компания «МойОфис» будет предлагать свои продукты под другим брендом – MyOffice. Но пока 95% мирового рынка в сегменте офисных приложений принадлежит компании Microsoft.

Интересно сколько из запланированного сбылось?

Здравствуйте! Что-то не сбылось, а в чем-то реальность превзошла ожидания. Прошлый год стал одним из самых успешных для нашей компании (подробно рассказали об этом здесь), нам удалось занять лидирующую позицию на рынке офисного ПО в России. В данный момент у нас более 10 тысяч коммерческих клиентов, общее количество проданных лицензий превысило миллион. Это говорит в первую очередь о востребованности продуктов МойОфис среди компаний. Также зафиксировано более 25 млн скачиваний дистрибутивов домашней версии частными пользователями. В Латинской Америке популярным стало наше мобильное приложение — около 7% скачиваний приходится именно на страны Латинской Америки.

Прошлый год стал одним из самых успешных для нашей компании

Поздравляю!!!

Это говорит в первую очередь о востребованности продуктов МойОфис среди компаний.

При том что сейчас ушли западные конкуренты, к концу 2023 года МойОфис похоже не выполнил планов из 2015 года на ближайшую пятилетку?

Также зафиксировано более 25 млн скачиваний дистрибутивов домашней версии частными пользователями. 

Речь о скачивании триала на 30 дней или о купивших лицензии/ подписки?

В области офисных пакетов - посмотрите на ONLYOFFICE\Р7. Хотя это формально разные конторы, тем не менее разработчик один, но сперва выпускаются релизы на зарубежно ориентированный (и к тому же бесплатный) ONLYOFFICE, и где то через 3-4 месяца накатываются обновления (причем не в полном объёме, так как тех же форм в Р7 нет) на отечественный Р7 (вполне себе за деньги лицензия, хотя и сравнительно гуманные). Что до ниже упомянутого МойОфис, то я так уж сильно не углублялся, так как очень разочарован в средствах автоматизации на нём, и потому пока для меня он не особо перспективен, но в принципе, они тоже вполне себе развиваются. Наверное что то продают и в тех странах, в которых не действуют санкции, но не думаю, что могут составить такую уж серьезную конкуренцию, так как недочётов там более чем хватает, по сравнению с тем же Libre или ONLYOFFICE

OnlyOffice - Wikipedia, базируются в Латвии в принципе понятно что они ориентируются на европейскую аудиторию…

но сперва выпускаются релизы на зарубежно ориентированный (и к тому же бесплатный) ONLYOFFICE

Прям реально бесплатный? Тогда трудно понять мотивацию покупателей в странах не под санкциями: не взять ONLYOFFICE бесплатно, а купить R7 за "гуманные деньги"?

Ну, как зарабатывают такие конторы? На оплате различных интеграционных процессов для крупных игроков, кому надо быстро и под ключ. Вот за такое и платят, и причем - весьма не хило. Плюс, есть спонсоры. Да и коммерческие варианты ПО, которые уже с расширенным функционалом

Очень интересно, как это можно сделать в LibreOffice.

А у VBA есть api для работы с LibreOffice? В принципе логика должна быть похожа, добавляем в код п.ссылки соотв. ключ.

В OpenOffice|LibreOffice - StarBasic, VBA (80% кода VBA выполняется сразу, можно смешивать код SB/VBA в одном модуле/процедуре и даже строке). Также поддерживаются макросы на Python, Java, JavaScript, C++. API доступен из любого ЯП, Макрорекордер кода SB менее функционален и тоже, как в MSO. плодит много мусорного кода.

Я не знаю чо там в ворде но в либре пишется текст "рис. " и ставится номер в виде ссылки. Без всяких скриптов.

Открыл либру, попробовал - действительно, там такой проблемы нет - можно сразу вставить номер рисунка.

Вы имеете в виду это: если в Либре открыть сделанный в word файл *.docx и там будут перекрёстные ссылки с паразитными надписями, как можно их убрать все разом?

Не готов ответить на этот вопрос, т.к. в Либрой знаком только шапочно, и что-то программировать в ней не пробовал...

OpenOffice|LibreOffice Writer по команде Вставка - Перекрестная ссылка - Рисунок - Вставить делает именно то что нужно в статье: вставляет номер рисунка (затененное серым поле). Затенение не печатается, может быть отключено.

Выделяем слово "рисунок" или "таблица" в перекрестной ссылке и жмём Ctrl+Shift+H. Не благодарите.

Открыл установленный на этом компе (на котором я счас пишу комент) word 2016, подгрузил документ с п.ссылками, сделал так как написано в комментарии ниже и ...ничего не произошло...

Даже если бы этот способ работал, дополнительно надо учитывать, что скрипты пишутся для того, чтобы решить проблему сразу для всего документа в целом. Представьте, у вас документ страниц на 400 в котором 500 рисунков и к ним 700 перекрёстных ссылок - это же сколько нужно времени чтобы каждую ссылку тыкнуть мышкой и нажать три клавиши... ) А если таких документов 15-20?... А с помощью скрипта можно эти все документы прогнать за минуту в автоматическом режиме.

хотел сказать - комментарий выше. Нажимал Ctrl+Shift+H в различных раскладках, выделял строку, содержащую п.ссылку, саму перекрёстную ссылку, отдельно название "Рисунок" - ничего не меняется. Счас попробовал с ноутбука под win7 - результат тот же.

Это делает текст не видимым, он подчеркивается пунктиром в режиме отображения всех символов и не отображается при печати. Это известный способ решения этой проблемы в Word и не только этой. Но способ так себе. Кстати, а как там в Word2016 c библиографией, все также нет шаблона для оформления её по ГОСТ?

как там в Word2016 c библиографией, все также нет шаблона для оформления её по ГОСТ?

А что должен быть такой шаблон в Word из коробки?

Макрос ломает как минимум перекрёстные ссылки на рисунки, в которых надо отображать и номер, и название рисунка ("см. Рисунок 1. КДПВ" тоже превращается в "см. 1") Да и исключать, что кто-то хочет именно "см. Рисунок 1", где "Рисунок" подставляется в составе поля, тоже нельзя, Вы же сами пишете про документы из кусков разного происхождения.

Так что, IMHO, не надо ломать существующий функционал, лучше добавить новый. Скажем, пройтись по всем подписям к рисункам и вдобавок к трём (!) скрытым закладкам, которые в каждой из них проставляет Word (на всю подпись, на часть "рисунок Х" и на часть с названием рисунка), добавить свою четвёртую - только на номер. Ну и сделать макрос, который обновляет эти закладки по всему документу и вставляет ссылку на нужную.

Да, если текст уже адаптирован таким образом, чтобы замаскировать эту особенность ворда, тогда да, после использования скрипта стоит пробежаться поиском по таким местам и исправить. А если делать текст изначально имея в виду, что у тебя подобный скрипт есть, то результаты будут лучше. ) Пользуйтесь, если вам нужно )

голосом Миронова "MS office - это не актуально"... что насчет R7 и прочих новых office?

Всю жизнь использовал наименование рисунка - рис. 5.1. В тексте вставлял "смотреть рис. 5.1"

То есть ваши рисунки были подписаны с маленькой буквы? Ну да, тоже по-всякому выкручивался, но как правило ставил название в скобочки, типа, "смотрите рисунок выше (Рисунок 5)"...

Интересный способ, но, к сожалению, он работает только если нумерация рисунков сквозная: 1, 2, 3 и т.д. А если нумерация в пределах раздела, то результат неверный выдает, например ссылку на Рисунок 1.1 выдает как "2".

Чтобы сделать перекрестные ссылки в Word удобными для использования, нужен пользовательский диалог "Перекрестные ссылки", который будет автоматически переопределять границы закладок. Т.е. стандартная команда Word VBA вставляет закладку на "Рисунок X.X", а затем другие макросы сразу же двигают левую границу этой закладки вплотную к номеру, так чтобы закладка была на "X.X". Готовый шаблон с макросами есть в интернете. Ссылку не даю, т.к. это будет наполовину рекламой. (Найти этот шаблон сложно, но можно, если читать форумы по теме перекрестных ссылок Word).

Действительно. Я обычно всегда использую сквозную нумерацию, гост разрешает. С этой многоуровневой нумерацией бывают проблемы - всегда стараюсь от неё избавиться.

Можете подсказать, как править код, чтобы он не ломал многоуровневую нумерацию?

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

Что касается проблемы с нумерацией рисунков, таблиц и формул в Word, то они вытекают из того, что настройки нумерации хранятся в шаблоне Normal. Поэтому на другом компьютере нумерация сбивается, а в диалоге «Перекрестные ссылки» нет нужных подписей (если они нестандартные).

Решается это перетаскиванием шаблона Normal на другой компьютер либо созданием макросов, которые автоматически создают подписи.

Я уже больше 10 лет программирую на VBA Word, и все необходимые макросы для эффективной вставки перекрестных ссылок в Word у меня в шаблоне есть, но я хотел бы написать статью на эту тему (с целью пиара), а пока с этим сложности.

я хотел бы написать статью на эту тем

С удовольствием прочитал бы такую статью!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории