1

Тема: Формирование оглавления в уже отформатированном файле

Есть файлы, в которых замечательные пользователи, не имеющие понятия о том, что такое оглавление нагородили огородов...
Задача: создать автооглавления
Идеи по поводу алгоритма:
1) Пройти по документу и найти все абзацы, отличающиеся по форматированию от места, где установлен курсор...
2) Собрать их в конце документа
3) Расставить вручную на них стили, удалив лишнее...
4) Запустить поиск по тексту в соответствии с отформатированным (в конце) псевдооглавлением и в соответствии с ним же применить стили...

Вопросы с тем, как эти все сделать...
особенно интересует (1) т.е. залить куда-то формат выделения, а потом уже как-то его сравнивать с абзацами..

Делай, что можешь, и будь, что будет!

2

Re: Формирование оглавления в уже отформатированном файле

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

With Selection.Font
        .Name = "Times New Roman"
        ИмяШрифта = .Name
        'MsgBox ИмяШрифта,
        РазмерШрифта = .Size
        'MsgBox РазмерШрифта
        If .Bold = True And .Italic = True Then Шрифт = "полужирный курсив" Else: Шрифт = "Неизвестно"
        If Шрифт = "Неизвестно" And .Bold = True And .Italic = False Then Шрифт = "Полужирный"
        If Шрифт = "Неизвестно" And .Bold = False And .Italic = True Then Шрифт = "Курсив"
        If Шрифт = "Неизвестно" And .Bold = False And .Italic = False Then Шрифт = "Обычный"
         MsgBox Шрифт
           End With

 ИмяСтиля = Selection.Style
  MsgBox ИмяСтиля
  With ActiveDocument.Styles(Selection.Style).Font
'-----------------------определение имя шрифта-----------------------------

        ИмяШрифта = ActiveDocument.Styles(Selection.Style).Font.Name
        MsgBox ИмяШрифта
'-----------------------конец определения цвета шрифта---------------------

'-----------------------определение размера шрифта-------------------------
        РазмерШрифта = ActiveDocument.Styles(Selection.Style).Font.Size

        MsgBox РазмерШрифта
'-----------------------конец определения размера шрифта-------------------
'-----------------------определение начертания шрифта-------------------------
        If .Bold = True And .Italic = True Then Шрифт = "полужирный курсив" Else: Шрифт = "Неизвестно"
        If Шрифт = "Неизвестно" And .Bold = True And .Italic = False Then Шрифт = "Полужирный"
        If Шрифт = "Неизвестно" And .Bold = False And .Italic = True Then Шрифт = "Курсив"
        If Шрифт = "Неизвестно" And .Bold = False And .Italic = False Then Шрифт = "Обычный"
                 MsgBox Шрифт
'-----------------------определение начертания шрифта-------------------------
'-----------------------определение цвета шрифта---------------------------
        ЦШ = .Color
        Select Case ЦШ
            Case Is = wdColorAutomatic
                ЦветШрифта = "Авто"
            Case Is = wdColorBlack
                ЦветШрифта = "Черный"
            Case Is = wdColorBrown
                ЦветШрифта = "Коричневый"
            Case Is = wdColorOliveGreen
                ЦветШрифта = "Оливковый"
            Case Is = wdColorDarkGreen
                ЦветШрифта = "Темно-зеленый"
            Case Is = wdColorDarkTeal
                ЦветШрифта = "Темно-сизый"
            Case Is = wdColorDarkBlue
                ЦветШрифта = "Темно-синий"
            Case Is = wdColorIndigo
                ЦветШрифта = "Индиго"
            Case Is = wdColorGray80
                ЦветШрифта = "Серый 80%"
            Case Is = wdColorDarkRed
                ЦветШрифта = "Темно-красный"
            Case Is = wdColorOrange
                ЦветШрифта = "Оранжевый"
            Case Is = wdColorDarkYellow
                ЦветШрифта = "Коричнево-зеленый"
            Case Is = wdColorGreen
                ЦветШрифта = "Зеленый"
            Case Is = wdColorTeal
                ЦветШрифта = "Сине-зеленый"
            Case Is = wdColorBlue
                ЦветШрифта = "Синий"
            Case Is = wdColorBlueGray
                ЦветШрифта = "Сизый"
            Case Is = wdColorGray50
                ЦветШрифта = "Серый 50%"
            Case Is = wdColorRed
                ЦветШрифта = "Красный"
            Case Is = wdColorLightOrange
                ЦветШрифта = "Светло-оранжевый"
            Case Is = wdColorLime
                ЦветШрифта = "Травяной"
            Case Is = wdColorSeaGreen
                ЦветШрифта = "Изумрудный"
            Case Is = wdColorAqua
                ЦветШрифта = "Темно-бирюзовый"
            Case Is = wdColorLightBlue
                ЦветШрифта = "Темно-голубой"
            Case Is = wdColorViolet
                ЦветШрифта = "Фиолетовый"
            Case Is = wdColorGray40
                ЦветШрифта = "Серый 40%"
            Case Is = wdColorPink
                ЦветШрифта = "Лиловый"
            Case Is = wdColorGold
                ЦветШрифта = "Золотисный"
            Case Is = wdColorYellow
                ЦветШрифта = "Желтый"
            Case Is = wdColorBrightGreen
                ЦветШрифта = "Ярко-зеленый"
            Case Is = wdColorTurquoise
                ЦветШрифта = "Бирюзовый"
            Case Is = wdColorSkyBlue
                ЦветШрифта = "Голубой"
            Case Is = wdColorPlum
                ЦветШрифта = "Вишневый"
            Case Is = wdColorGray25
                ЦветШрифта = "Серый 25%"
            Case Is = wdColorRose
                ЦветШрифта = "Розовый"
            Case Is = wdColorTan
                ЦветШрифта = "Светло-коричневый"
            Case Is = wdColorLightYellow
                ЦветШрифта = "Светло-желтый"
            Case Is = wdColorLightGreen
                ЦветШрифта = "Бледно-зеленый"
            Case Is = wdColorLightTurquoise
                ЦветШрифта = "Светло-бирюзовый"
            Case Is = wdColorPaleBlue
                ЦветШрифта = "Бледно-голубой"
            Case Is = wdColorLavender
                ЦветШрифта = "Сиреневый"
            Case Is = wdColorWhite
                ЦветШрифта = "Белый"
        End Select
                MsgBox ЦветШрифта
  '-----------------------Конец определения цвета шрифта-----------------------------
  '--------------------Определение типа и цвета подчеркивания------------------------
        If .Underline <> wdUnderlineNone And .Underline <> wdUnderlineWords Then
                ТипПодчеркивания = .Underline
                Application.Keyboard (1049)
                Selection.TypeText Text:="Тип подчеркивания"
                Selection.Extend
                Selection.Extend
                Selection.Extend
        ЦПШ = .UnderlineColor
        Select Case ЦПШ
            Case Is = wdColorAutomatic
                ЦветПодчеркивания = "Авто"
            Case Is = wdColorBlack
                ЦветПодчеркивания = "Черный"
            Case Is = wdColorBrown
                ЦветПодчеркивания = "Коричневый"
            Case Is = wdColorOliveGreen
                ЦветПодчеркивания = "Оливковый"
            Case Is = wdColorDarkGreen
                ЦветПодчеркивания = "Темно-зеленый"
            Case Is = wdColorDarkTeal
                ЦветПодчеркивания = "Темно-сизый"
            Case Is = wdColorDarkBlue
                ЦветПодчеркивания = "Темно-синий"
            Case Is = wdColorIndigo
                ЦветПодчеркивания = "Индиго"
            Case Is = wdColorGray80
                ЦветПодчеркивания = "Серый 80%"
            Case Is = wdColorDarkRed
                ЦветПодчеркивания = "Темно-красный"
            Case Is = wdColorOrange
                ЦветПодчеркивания = "Оранжевый"
            Case Is = wdColorDarkYellow
                ЦветПодчеркивания = "Коричнево-зеленый"
            Case Is = wdColorGreen
                ЦветПодчеркивания = "Зеленый"
            Case Is = wdColorTeal
                ЦветПодчеркивания = "Сине-зеленый"
            Case Is = wdColorBlue
                ЦветПодчеркивания = "Синий"
            Case Is = wdColorBlueGray
                ЦветПодчеркивания = "Сизый"
            Case Is = wdColorGray50
                ЦветПодчеркивания = "Серый 50%"
            Case Is = wdColorRed
                ЦветПодчеркивания = "Красный"
            Case Is = wdColorLightOrange
                ЦветПодчеркивания = "Светло-оранжевый"
            Case Is = wdColorLime
                ЦветПодчеркивания = "Травяной"
            Case Is = wdColorSeaGreen
                ЦветПодчеркивания = "Изумрудный"
            Case Is = wdColorAqua
                ЦветПодчеркивания = "Темно-бирюзовый"
            Case Is = wdColorLightBlue
                ЦветПодчеркивания = "Темно-голубой"
            Case Is = wdColorViolet
                ЦветПодчеркивания = "Фиолетовый"
            Case Is = wdColorGray40
                ЦветПодчеркивания = "Серый 40%"
            Case Is = wdColorPink
                ЦветПодчеркивания = "Лиловый"
            Case Is = wdColorGold
                ЦветПодчеркивания = "Золотисный"
            Case Is = wdColorYellow
                ЦветПодчеркивания = "Желтый"
            Case Is = wdColorBrightGreen
                ЦветПодчеркивания = "Ярко-зеленый"
            Case Is = wdColorTurquoise
                ЦветПодчеркивания = "Бирюзовый"
            Case Is = wdColorSkyBlue
                ЦветПодчеркивания = "Голубой"
            Case Is = wdColorPlum
                ЦветПодчеркивания = "Вишневый"
            Case Is = wdColorGray25
                ЦветПодчеркивания = "Серый 25%"
            Case Is = wdColorRose
                ЦветПодчеркивания = "Розовый"
            Case Is = wdColorTan
                ЦветПодчеркивания = "Светло-коричневый"
            Case Is = wdColorLightYellow
                ЦветПодчеркивания = "Светло-желтый"
            Case Is = wdColorLightGreen
                ЦветПодчеркивания = "Бледно-зеленый"
            Case Is = wdColorLightTurquoise
                ЦветПодчеркивания = "Светло-бирюзовый"
            Case Is = wdColorPaleBlue
                ЦветПодчеркивания = "Бледно-голубой"
            Case Is = wdColorLavender
                ЦветПодчеркивания = "Сиреневый"
            Case Is = wdColorWhite
                ЦветПодчеркивания = "Белый"
        End Select
                MsgBox ЦветПодчеркивания
            With Selection.Font
                .Underline = ТипПодчеркивания
                .UnderlineColor = ЦветПодчеркивания
                .Color = wdColorWhite
                MsgBox ЦветПодчеркивания
            End With
        End If
        .Color = wdColorAutomatic
 End With