Pull to refresh

Comments 28

PinnedPinned comments

В первом комменте к вашему совету оставлю ссылки на последующие комментарии, которых описываюся нюансы этого конкретного случая и почему описанное в статье решение сработало быстрее (чтобы не тратить время на чтение всех-всех комментариев):

https://habr.com/ru/articles/740570/comments/#comment_25629608
https://habr.com/ru/articles/740570/comments/#comment_25628982
https://habr.com/ru/articles/740570/comments/#comment_25632150

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

Возможно потому что автор путает трудозатраты со сроками.

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

как следствие если менять это руками в Word-e надо выделять только нужные куски текста.

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

Первый вариант легче автоматизировать

У меня еще не было такого опыта. Буду рад почитать/посмотреть как это сделать…

В первом комменте к вашему совету оставлю ссылки на последующие комментарии, которых описываюся нюансы этого конкретного случая и почему описанное в статье решение сработало быстрее (чтобы не тратить время на чтение всех-всех комментариев):

https://habr.com/ru/articles/740570/comments/#comment_25629608
https://habr.com/ru/articles/740570/comments/#comment_25628982
https://habr.com/ru/articles/740570/comments/#comment_25632150

автор путает что такое брут-форс

Факт грубого вмешательства в этом кейсе присутствует? Думаю, да.

PS я готов, изменить заголовок если вы подскажете синоним)

Brute-force - характеристика переборных методов, когда решение подбирается перебором и сравнением с ожидаемым результатом. То что это на русский переводится как "грубая сила" не значит что любое вмешательство в подлежащие технологии можно называть brute force.

https://ru.wikipedia.org/wiki/Полный_перебор

Заменил в заголовке на "грубое вмешательство". В виду того, что вышеизложенный метод не относится к штатным способам для MS Word

Спасибо, за то что указали на эту мою ошибку !

Брут-форс - это атака перебором, методом "грубой силы". У вас явно другое.

Если уж хочется "хакерского" сленга, то в вашем случае банальный термин "хакинг" и то ближе по смыслу.

p.s. хотя по сути штатное редактирование XML файла docx относить к хакерству вообще язык не поворачивается. Вот если бы после ваших замен Word выполнял произвольный код - это хакинг, а изменить шрифт - это просто "Смена шрифта в docx файле нештатным для MS Word способом"

Я исправил заголовок статьи. Ещё хочу отметить, что она опубликована в хабе Подготовка технической документации поэтому не стоит ожидать в ней хакерских откровений :)

"Смена шрифта в docx файле нештатным для MS Word способом"

Согласен с вашей формулировкой! Опубликовал этот креатив здесь так как надеюсь, что кому-то из пользователей будет полезен этот опыт

Сам по себе креатив вполне годный и можем кому-то сильно помочь.

Это же почти что sed программирование 😅

Вас заставляют какой-то фигнёй заниматься. Я бы ещё понял Times New Roman на более доступный аналог менять по каким-то правовым заморочкам. Но зачем вообще тратить время на то, что тут делается? Такой шрифт нужен только если документ рукописный - чтобы чужой почерк потом не разбирать. Но рукописные текстовые документы уже лет 25 никто не делает.

Вас заставляют какой-то фигнёй заниматься.

Абсолютно с вами согласен! У нас разработано 3 варианта шаблонов MS Word для наших "ключевых Заказчиков". Например в любом техническом задании от Центрального Банка РФ всегда в конце документна идут требования к оформлению документации на 8 листах (но это не точно), где подробро прописано что/каким шрифтом (из общепринятых)/ с какими отступами должно и т.д. быть в документе написано.

Тут я понимаю, наша Контора подписалась что готовит документацию в соответствии с Требованиями Закачика четко прописанными в ТЗ!

А встречаются такие "затейники", присылают свои хотелки: вот хочу чтобы было написано шрифтом XYZ, что даже кушать не могу.

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

Ни в одном из ГОСТ из серии СПДС, нет требований обязательно "чертёжного шрифта"!!! Особенно в текстовой документации, которая выполняется в MS Word…

Например в ГОСТ Р 21.101-2020 в пункте 5.1.5 при использовании ЭВМ при разработке документации не желательно использовать некие экзотические шрифты.

В ранней версии (ГОСТ Р 21.1101-2013) формулировалось так

Сторонники карго-культа "чертёжного шрифта", аппелируют к упоминанию ГОСТ 2.304-81 (Единая система конструкторской документации. Шрифты чертежные). Мол в этом ГОСТе ничего не сказано ни про Arial, ни Times New Roman. Этот ГОСТ был написан 40 лет назад, когда Arial и Times New Roman еще в помине не было :)

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

Я в начале 80-ых был еще дошкольником, не знаю были ли в природе печатные машинки с ГОСТ-оподобными литерами ?

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

Вот поэтому в шаблонах, рассчитанных на многократное применение, надо сразу делать всё по уму и не просто создавать кучу стилей, а делать их иерархию. Чтобы все стили текста наследовали гарнитуру шрифта от одного общего, все стили заголовков - от другого (если они отличаются). И тогда замена шрифта сводится к изменению ровно одного стиля. В общем, наследование и DRY как оно есть :)

P.S. Ну и в крайнем случае, набросать макрос на 5 строк, который проходит по всем стилям и меняет одну гарнитуру на другую, IMHO, проще, чем вот это всё.

надо сразу делать всё по уму и не просто создавать кучу стилей, а делать их иерархию.

В данном примере "имеем, что имеем".

Чтобы все стили текста наследовали гарнитуру шрифта от одного общего

Если я правильно понимаю, выделенная маркером строка говорит, то то что стиль **Заг5-номер построен на базе стиля Normal

И тогда замена шрифта сводится к изменению ровно одного стиля

В нашем случае ожидаемого чуда не произошло, поэтому пришлось городить такое…

Есть стили абзаца, есть стили текста, там не самая очевидная иерархия, надо всё вместе смотреть. Удобно вывести стили в боковую панельку и тогда во всплывающих подсказках показывает полностью, на чём стиль основан и что у него переопределено по сравнению с родителем.

Хотя Word в этом плане, конечно, не самый удобный инструмент, согласен. Помнится, лет 15 назад пользовался Framemaker, там всё было гораздо логичнее.

Есть стили абзаца, есть стили текста, там не самая очевидная иерархия.

Абсолютно точно !

Я уточнил у шефа, почему это заняло у него много времени. Оказалось не все стили наследовались от стиля Normal. Некоторые были основаны на самих себе (!)

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

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

P.P.S. Написано за 1 минуту, работает:

Sub replacefonts()
    Dim s As Style
    For Each s In ActiveDocument.Styles
        If s.Font.Name = "Calibri" Then
            s.Font.Name = "Arial"
        End If
    Next
End Sub

Конкретно в этом документе, было только 240 стилей которые нужны потенциально. куча встроенных, куча заблокированных, куча скрытых.

В ряде случаев замена не происходила по иерархии! Поэтому мой начальник сидел и просматривал все ли стили из желательных получили замену шрифта.

История с заменой случилась позавчера, удалось быстро реализовать эту нелепую блажь дорогого Заказчика!

Вчера мы подобными макросами пытались добиться замены, с некоторыми стилями приходилось прогонять код по несколько раз!

Подозреваю, что проблема с документом! Слишком там все сложно со стилями и безумно запутано.

В 99% случаев предложенный вами код отработал бы с блеском!
Спасибо!!!

PS Удалось понять почему не менялось форматирование после длинной черты (—): в присланном Заказчиком шрифте не было такого символа. Этот символ находился в середине строки. Word похоже считал его концом строки, и добавлял соответствующий тэг, после удаления и вставки на место этого символа тэг конца строки не появлялся.

А просто в поиске Worda указать заменить шрифт1 на шрифт2 и не разбираться с артефактами?

В документе более 200 стилей, далеко не все из них используются. Предложенный вами вариант может заменить шрифт в найденном тексте. А если завтра кто-то допишет пару строк и применит к ним стиль ранее не применявшийся.

Новый текст будет со старым шрифтом?

Sign up to leave a comment.

Articles