0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 11
1

Удаление лишних стилей из документа

14.03.2013, 09:54. Показов 25850. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Часто бывает, что после преобразования файла PDF или сборки частей документа от разных пользователей конечный файл DOC содержит множество (бывает около сотни) "левых" стилей типа style_1 и пр.
Существует ли возможность быстрого (пакетного) удаления таких ненужных стилей из документа? Чтобы остались только необходимые, типа Обычный, Заголовок 1...
То, что к тексту после удаления его стиля из документа автоматически применяется стиль Обычный - устраивает.

На данный момент вручную удаляю стили по одному в диалоговом окне Управление стилями или на панели Стили. Но очень уж утомителен процесс
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2013, 09:54
Ответы с готовыми решениями:

Удаление лишних пробелов...
Случайно наткнулся, как можно заменить 2 и более любых пробелов (обычные и неразрывные) на один...

Удаление лишних переводов на новую строку с удалением лишних пробелов
Добрый вечер, форумчане! Прошу помочь. Из текста необходимо удалить лишние знаки пробелов и...

Сцепка текста в ячейках, если совпадают значения в столбце А, удаление повторов имен, удаление лишних строк
Добрый день, подскажите, как решить задачу: Есть список организаций с контактами. Одна организация...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со...

8
6002 / 3197 / 716
Регистрация: 23.11.2010
Сообщений: 10,683
14.03.2013, 10:13 2
А если полностью очистить форматирование, а потом применить Обычный
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
14.03.2013, 10:33 3
один из вариантов --макросои
Код
Sub w130314_del_style()
Dim st00 As Style, s1a, s2, j1
s2 = "`"
j1 = Word.ActiveDocument.Styles.Count + 1
Debug.Print j1
Do While j1 > 1
    j1 = j1 - 1
    Set st00 = Word.ActiveDocument.Styles(j1)
    s1a = st00.NameLocal
    If st00.BuiltIn = True Then
    'встроенные оставляю
    ElseIf s1a Like "Font*" Or s1a Like "Style*" Then
    'оставляю
    Debug.Print j1, st00.Type; s2; st00.BuiltIn; s2; st00.InUse; s2; s1a; s2; st00.Description
    'st00.Delete
    ElseIf s1a Like "Обычн*" Then
    'оставляю
    Debug.Print j1, st00.Type; s2; st00.BuiltIn; s2; st00.InUse; s2; s1a; s2; st00.Description
    Else
    ''остальные удаляю
    On Error Resume Next
    st00.Delete
    End If
    Loop
    ''''''''''''''''''''''''''''
    
End Sub
хотя после файнридера легче очистить все форматирование и заново отформатировать как нужно
3
0 / 0 / 0
Регистрация: 13.03.2013
Сообщений: 11
14.03.2013, 10:41  [ТС] 4
Цитата Сообщение от Fairuza Посмотреть сообщение
А если полностью очистить форматирование, а потом применить Обычный
Это да. Но тогда слетают все заголовки, списки, выделения полужирным и прочее - потом очень трудоемко восстанавливать. Да и дело даже больше не в трудоемкости, сколько в опасности пропустить форматирование какого-либо элемента

Добавлено через 1 минуту
Цитата Сообщение от shanemac51 Посмотреть сообщение
один из вариантов --макросои
хотя после файнридера легче очистить все форматирование и заново отформатировать как нужно

Спасибо, а какие стили удаляются этим макросом?
0
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
14.03.2013, 10:47 5
однажды умучилась с файлом
--стиль назван Заголовок .... а в оглавление не идет
--стиль обычный ---а лезет в оглавление

оказалось --уровень расставлен безобразно

кончилось тем, что написала макросик и прошла по всем параграфам для переприсвоения стиля(а главное --уровня)

------
в зависимости от уровня --надо было перевести в НТМ
1
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
21.03.2024, 15:41 6
Цитата Сообщение от shanemac51 Посмотреть сообщение
хотя после файнридера легче очистить все форматирование и заново отформатировать как нужно
хотя еще задолго до работы с файнридером, я применила подобный прием(причем это была моя первая работа в ВОРДе, более 100 стандартов предприятия по 20-50 страниц)
- операторы набирали текст стандарта с рукописного источника ЗАГЛАВНЫМИ буквами, не заботясь об оформлении, гладким текстом и даже не в ВОРДе
- таблицы набивали построчно через разделитель
-*** уже в ворде заменяла заглавные на строчные, при этом выделяла латиницу красным шрифтом, причем шрифт достаточно крупный через макрос
- только потом преобразовывали табличные строки в таблицу
- далее - ЧЕРНОВАЯ РАСПЕЧАТКА для контроля составителем стандарта
- ввод корректур
------только сейчас присвоение стилей, которое занимало около 5 минут через макрос
- ЧИСТОВАЯ РАСПЕЧАТКА

весь цикл занимал около 8 часов, причем 2 часа шла печать на матричном принтере
все макросы я подготовила в 1-й месяц, когда я с трудом осилила первый стандарт(1998 год, спросить не у кого, интернета практически нет)

когда через несколько лет понадобилось переводить ПДФ в ВОРД с помощью файнридера-9, использовала этот же прием
- распознавала, вручную расставляя области, максимально используя таблицы для макетирования страницы, сканы были очень грязные и кривые
- сохраняла разбиение на страницы и строки
- сохраняла как простой текст в ВОРД, проблемные фрагменты сохраняла картинками
- далее, как в стандартах с пункта ***

это сейчас много ПДФ с текстовым слоем, но далеко не все
1
Динохромный
1375 / 749 / 271
Регистрация: 22.12.2015
Сообщений: 2,340
21.03.2024, 16:14 7
Цитата Сообщение от shanemac51 Посмотреть сообщение
это сейчас много ПДФ с текстовым слоем, но далеко не все
Тут другой момент возникает - у меня был прецедент, когда в одном документе на одном листе были расставлены артикулы. Два из них были условно говоря вида АБВГДЕЖ4564 и АБВГДЕЖ1215, то есть отличались исключительно цифрами (как впрочем и прочие). Так вот если выделить мышкой АБВГДЕЖ4564 и скопировать, то в буфер обмена попадало АБВГДЕЖ1215, а если выделить АБВГДЕЖ1215 и скопировать, то в буфер попадало АБВГДЕЖ4564 - то есть "крест-накрест". Все остальные артикулы копировались корректно, эти два находились в двух разных концах документа формата А1.

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

Соответственно, если в ФР стоит настройка "определять режим автоматически", это не есть панацея, что и как пошло в текстовой слой при печати пдф - вопрос всегда открытый, и хорошо если это просто кракозябрица.
1
26 / 11 / 1
Регистрация: 20.05.2015
Сообщений: 211
03.04.2024, 01:38 8
Простенький макрос, который удаляет все стили (кроме стандартных),

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub RemoveAllStyles()
    Dim style As style
    ' Пробегаю по всем стилям
    For Each style In ActiveDocument.Styles
        ' Если стиль не стандартный, удаляю        
        If style.BuiltIn = False Then
           style.Delete            
        End If
    Next style
End Sub
Так же, чтоб документ не коробило можно удалить все стили, кроме тех, которые используются в документе, то есть по мере оформления и замене левых стилей регулярно вызывать этот макрос, а он уже будет удалять стили, которые не используются.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub RemoveAllUnnecessaryStyles()
    Dim style As style
    ' Пробегаю по всем стилям
    For Each style In ActiveDocument.Styles
        ' Если стиль не стандартный,
        ' так же можно дописать доп условие, например все мои стили, которые не хочу удалять
        ' начинаются с восклицательного знака и тогда в условии можно добавить "And (InStr(style.NameLocal, "!") <> 1)"
        If style.BuiltIn = False Then
            'Ищу текст данного стиля в документе
            With ActiveDocument.Content.Find
                .ClearFormatting
                .style = style.NameLocal
                .Execute findText:="", Format:=True
            ' Если не нашел теста с таким стилем - удаляю стиль
            If .Found = False Then style.Delete
            End With
        End If
    Next style
End Sub
Единственное, панелька стилей в Ворде от макросов не всегда обновляется и визуально, до какого-нибудь действия стили там как бы видны, хотя по факту их уже не существует.


Написал этот пост в том числе для себя, когда в очередной раз забуду где у меня лежит этот макрос, а эта тема в поиске вылезет.
1
Модератор
Эксперт MS Access
11957 / 4825 / 779
Регистрация: 07.08.2010
Сообщений: 14,138
Записей в блоге: 4
03.04.2024, 06:50 9
Цитата Сообщение от Dinoxromniy Посмотреть сообщение
Так вот если выделить мышкой АБВГДЕЖ4564 и скопировать, то в буфер обмена попадало АБВГДЕЖ1215, а если выделить АБВГДЕЖ1215 и скопировать, то в буфер попадало АБВГДЕЖ4564 - то есть "крест-накрест"
Считаю, что это заплатки - ручное корректирование ПДФ-файла, исправление ошибки первоначального формирования
0
03.04.2024, 06:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2024, 06:50
Помогаю со студенческими работами здесь

Отображение xml-документа. Шаблоны стилей xsl.
Суть проблемы такова, имеются два datagridView, которые связаны между собой по ключу serialNumber....

Удаление лишних пробелов
В заданной строке удалить все лишние пробелы. Прошу помощи.

Удаление лишних пробелов
Знаю, тема изъёрзана) но вот код, и своих функций он не выполняет( #include &lt;iostream&gt; using...

Удаление лишних пробелов
Отредактировать предложение, удаляя из него лишние пробелы, оставляя только по одному пробелу между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru