1

Тема: Макрос для форматирования текста, скопированного из интернета

В ряде случаев, при копировании текстов из интернета одновлеменно копируются и переносы строк и слов.
Вот пример такого текста, приведенный в http://wordexpert.ru/forum/viewtopic.php?id=1359:

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

Вот некоторые примеры обсуждения указанной проблемы на нашем форуме:
http://wordexpert.ru/forum/viewtopic.php?id=1005
http://wordexpert.ru/forum/viewtopic.php?id=1359

Был разработан макрос, позволяющий автоматизировать форматирование подобного текста:

Он выполняет следующие действия:
1) Удаление пробелов в конце строк, где они есть (замена " ^p" на "^p" несколько раз)
2) Удаление знаков переноса (замена "-^p" на "" и "–^p" на "")
3) Добавление пустых строк после различных знаков препинания:
а) Добавление пустой строки после точки (замена ".^p" на ".^p^p")
б) Добавление пустой строки после двоеточия (замена ":^p" на ":^p^p")
в) Добавление пустой строки после точки с запятой (замена ";^p" на ";^p^p")
г) Добавление пустой строки после восклицательного знака (замена "!^p" на "!^p^p")
д) Добавление пустой строки после вопросительного знака (замена "?^p" на "?^p^p")
е) Добавление пустой строки после троеточия (замена "…^p" на "…^p^p")
4) Выделение сочетания "^p^p" жирным шрифтом (замена "^p^p" нежирным шрифтом на "^p^p" жирным шрифтом)
5) Замена "^p" на " " для нежирного шрифта (замена "^p" нежирным шрифтом на " " нежирным шрифтом)
6) Убрать знаки переноса жирным шрифтом (замена "^p" жирным шрифтом на "^p" нежирным шрифтом)
Недостатки данного макроса:
1) Он объединяет с последующим текстом строки, которые не кончаются на знаки препинания (заголовки, знак препинания пропущен, названия рисунков, номер страницы книги).
2) Не работает с таблицами.
3) «Ошибается», если знак переноса выделен жирным шрифтом.
4) Если знак переноса «случайно» находится после знака «тире» в словах, в которых должно стоять тире (например, «административно-территориальный», «социально-экономический»), то конец строки и начало следующей строки объединяются без тире («административнотерриториальный», «социальноэкономический»).
5) Если знак переноса «случайно» находится после знака «точка с запятой», то считается, что это конец строки (это не всегда так).

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Макрос для форматирования текста, скопированного из интернета

Вот предлагаемый макрос:

Sub Макрос1()
'
' Макрос1 Преобразование txt в doc
'
'
' 1) Удаление пробелов в конце строк, где они есть (замена " ^p" на "^p" несколько раз)
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = " ^p"
        .Replacement.Text = "^p"
        .Execute Replace:=wdReplaceAll
    End With
    With Selection.Find
        .Text = " ^p"
        .Replacement.Text = "^p"
        .ClearFormatting
        .Replacement.ClearFormatting
        .Execute Replace:=wdReplaceAll
    End With
    With Selection.Find
        .Text = " ^p"
        .Replacement.Text = "^p"
        .Execute Replace:=wdReplaceAll
    End With
    
' 2) Удаление знаков переноса (замена "-^p" на "" и "-^p" на "")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "-^p"
        .Replacement.ClearFormatting
        .Replacement.Text = ""
'        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
    With Selection.Find
        .Text = "-^p"
        .Replacement.ClearFormatting
        .Replacement.Text = ""
        .Execute Replace:=wdReplaceAll
    End With
    
' 3а) Добавление пустой строки после точки (замена ".^p" на ".^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = ".^p"
        .Replacement.Text = ".^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 3б) Добавление пустой строки после двоеточия (замена ":^p" на ":^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = ":^p"
        .Replacement.Text = ":^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 3в) Добавление пустой строки после точки с запятой (замена ";^p" на ";^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = ";^p"
        .Replacement.Text = ";^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 3г) Добавление пустой строки после восклицательного знака (замена "!^p" на "!^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "!^p"
        .Replacement.Text = "!^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 3д) Добавление пустой строки после вопросительного знака (замена "?^p" на "?^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "?^p"
        .Replacement.Text = "?^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 3е) Добавление пустой строки после троеточия (замена "…^p" на "…^p^p")
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "…^p"
        .Replacement.Text = "…^p^p"
        .Replacement.Font.Bold = False
        .Execute Replace:=wdReplaceAll
    End With
' 4) Выделение сочетания "^p^p" жирным шрифтом (замена "^p^p" нежирным шрифтом на "^p^p" жирным шрифтом)
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "^p^p"
        .Replacement.Text = "^p^p"
        .Replacement.Font.Bold = True
        .Execute Replace:=wdReplaceAll
    End With
    
' 5) Замена "^p" на " " для нежирного шрифта (замена "^p" нежирным шрифтом на " " нежирным шрифтом)
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .Text = "^p"
        .Font.Bold = False
        .Replacement.Text = " "
        .Replacement.ClearFormatting
        .Execute Replace:=wdReplaceAll
    End With
' 6) Убрать знаки переноса жирным шрифтом (замена "^p" жирным шрифтом на "^p" нежирным шрифтом)
    Selection.Start = 0
    Selection.End = 0
    With Selection.Find
        .ClearFormatting
        .Format = True
        .Font.Bold = True
        .Text = "^p^p"
        .Replacement.ClearFormatting
        .Replacement.Text = "^p"
        .Forward = True
        .Execute Replace:=wdReplaceAll
    End With
End Sub

Краткая инструкция по применению файлов в Word находится здесь:
http://wordexpert.ru/forum/viewtopic.php?id=1342

Примечание - После окончания работы макроса полученный файл необходимо отредактировать.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Макрос для форматирования текста, скопированного из интернета

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

Для использования прилагаемого файла вам необходимо сделать следующее:
- Скачать файл и разархивировать его.
- Открыть файл FileConvertion - Test.doc в режиме поддержки макросов.
- Удалить из указанного файла весь имеющийся там текст и скопировать в него тот текст, который вам необходимо преобразовать.
- Применить макрос (макрос называется FileConvertion).

Примечание - После окончания работы макроса полученный файл необходимо отредактировать.

Post's attachments

FileConvertion.zip 51.64 Кб, 83 скачиваний с 2012-06-21 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Макрос для форматирования текста, скопированного из интернета

А что если не все строки имеют перенос? И предположим. нужно заменить "^p" на "" при условии, что следующая строка начинается с маленькой литеры? Можно такое сделать?

Post's attachments

2014-12-03_073208.png 21.9 Кб, 1 скачиваний с 2014-12-03 

You don't have the permssions to download the attachments of this post.

5

Re: Макрос для форматирования текста, скопированного из интернета

Eldingar пишет:

А что если не все строки имеют перенос? И предположим. нужно заменить "^p" на "" при условии, что следующая строка начинается с маленькой литеры? Можно такое сделать?

Для такого текста макрос должен работать.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.