Заблокирован
1

Вставка перед текстом знака абзаца

10.04.2010, 12:11. Показов 8694. Ответов 9
Метки нет (Все метки)

В документе есть жирный текст двух видов:
  1. Без отступа слева.
  2. И с отступом слева.
Нужно вставить Знак абзаца только перед текстом, не имеющим Отступ.
Как это сделать? Вот код, который я использую:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub m_1()
'Вставка пустого знака абзаца во ВСЁМ документе
    With ActiveDocument.Range.Find
        .Text = "^p"
        .Font.Animation = wdAnimationNone
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    While .Execute
        .Parent.Select
        Selection.Paragraphs(1).Range.Select
        If Selection.Characters.Count > 1 Then
             If Selection.ParagraphFormat.FirstLineIndent = 0 Or Selection.Font.Bold = True Then
                Selection.InsertParagraphBefore
            End If
        End If
    Wend
    End With
End Sub
Вложения
Тип файла: doc Жирный текст.doc (46.0 Кб, 27 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2010, 12:11
Ответы с готовыми решениями:

Вставка в закладку в Word: добавляется символ абзаца
Добрый день! Очень долго искала информацию на форуме - не нашла. Работаю над макросом создания...

Вставка текста перед написанным текстом
Если честно, вообще не понимаю как это реализовать. Например написал я слово "хороший" нажал Enter...

Вставка переменной после определенного текстового абзаца
Добрый вечер. Есть переменная которая выводит текст: <p>текст с html</p> <p>текст с html</p>...

обрывание переменной с текстом без знака ? в ромбе
$stroka=$row;//получаем текст в исходном виде $newstr=""; $input="a";...

9
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
11.04.2010, 04:09 2
не вижу разницы между БЫЛО и НАДО. поясни
Миниатюры
Вставка перед текстом знака абзаца  
0
Заблокирован
11.04.2010, 08:03  [ТС] 3
ironegg,
Миниатюры
Вставка перед текстом знака абзаца  
0
Заблокирован
11.04.2010, 10:10  [ТС] 4
Кому интересно, вот так придумал:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub m_1()
'Вставка пустого знака абзаца во ВСЁМ документе
    With ActiveDocument.Range.Find
        .Text = "^p"
        .Font.Animation = wdAnimationNone
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        While .Execute
            .Parent.Select
            Selection.Paragraphs(1).Range.Select
            If Selection.Characters.Count > 1 Then
                 If Selection.ParagraphFormat.FirstLineIndent = 0 Or Selection.Font.Bold = True And _
                   Selection.ParagraphFormat.LeftIndent + Selection.ParagraphFormat.FirstLineIndent = 0 Then
                    Selection.InsertParagraphBefore
                End If
            End If
        Wend
    End With
End Sub
Если есть какие пожелания, то пишите.
0
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
12.04.2010, 04:10 5
не проверял, но поидее тоже самое, только немного изящнее(и быстрее)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub m_1()
    'Âñòàâêà ïóñòîãî çíàêà àáçàöà âî ÂÑ¨Ì äîêóìåíòå
    Dim p As Paragraph
    For Each p In ActiveDocument.Paragraphs
        With p.Range
            If .Characters.Count > 1 Then
                If .ParagraphFormat.FirstLineIndent = 0 Or .Font.Bold = True And _
                    .ParagraphFormat.LeftIndent + .ParagraphFormat.FirstLineIndent = 0 Then
                    .InsertParagraphBefore
                End If
            End If
        End With
    Next p
End Sub
и, кстати, обрати внимание на значение свойства Bold - wdUndefined (я так понял, есть и жирный и нежирный)
0
Заблокирован
12.04.2010, 07:50  [ТС] 6
ironegg,
я здесь представил часть кода, если обратишь, там есть слово Анимация. Это придумано для того, чтобы работать только с текстом, а не с Таблицами. Я помечаю в Таблицах текст Анимацией, и он не затрагивается. Если в данном случае использовать for each, то абзацы в таблицах будут тоже просматриваться, поэтому я использую find.
0
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
12.04.2010, 09:29 7
можно и проверочку на анимацию сделать, например в 6 строке
Visual Basic
1
            If .Characters.Count > 1 And .Font.Animation = wdAnimationNone Then
фактически, метод Find делает то же самое. просто он универсальный еще и работает с использованием объекта Selection. слевовательно медленнее. ну и наглядности не хватает
0
Заблокирован
12.04.2010, 21:49  [ТС] 8
ironegg,
я могу ошибаться, т.к. не разбираюсь в программировании, но метод find работает быстрее, чем просмотр всех элементов.
Пример, в тексте есть слово вырезано. Оно встречается 1 раз в документе из 500 страниц.
В твоём случае должны быть просмотрены несколько тысяч слов, а в моём просто нужно найти это слово.
1
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
13.04.2010, 07:33 9
ты прав. если речь идет о поиске редко встречающихся слов, метод Find работает весьма быстро. вероятно он использует индекс для ускорения поиска. в твоем же случае поиск вообще не нужен. так как ты ищешь то, из чего состоит документ - параграфы(абзацы). не проще ли их просто перебрать?.
к тому же метод Find работает посредством объекта Selection (который является средством взаимодействия с пользователем, т.е в данном случае бесполезен; еще и медленнен, вероятно из-за того, что задействует оконые процедуры перерисовки). посмотри на строки 12 и 13
Visual Basic
1
2
.Parent.Select
Selection.Paragraphs(1).Range.Select
здесь происходит получение предка найденного символа(вероятно, его предок - параграф), вызов метода выделения. далее, обращение к первому(и единственному в данном случае!) параграфу из коллекции параграфов в выделении, наконец мы добираемся до содержимого параграфа и (в который уже раз) выделяем его. после выполнения строки 13 вообще ничего не меняется.
я конечно, не видел твоего документа, но для моего *.doc из 85 страниц твой код выполняется 28сек, а мой 8 сек. поэтому я и решил предложить тебе другой код. а так, конечно, оба кода рабочие и 20 сек несущественно.
0
Заблокирован
13.04.2010, 20:59  [ТС] 10
ironegg,
приношу извинения за нецензурную брань, просто я напился как обычно.
Я прочитаю твой код и текст в выходные (я только тогда трезвый).
Но я хочу отметить, что я ищу не все абзацы, а только те, которые без Анимации.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2010, 20:59
Помогаю со студенческими работами здесь

Вывод знака + перед числом
Привет! подскажите как мне решить такую проблему есть переменная $temperatura она возврацает...

Значки перед текстом
Подскажите пожалуйста, у меня есть 3 надписи, и перед каждой из них должна быть одна и та же...

Функция для определения знака перед числом
Народ такая проблема. У меня стоит обнуление то есть если я введу 000000000000000000000000000045 то...

Вставка строки после знака / в url
Добрый день. У меня есть url скажем: http://www.site.ru/news/post. Не надо переl последним знаком...


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

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

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