- Сообщения
- 7,981
- Реакции
- 6,756
Привет,
вообщем сильно поднадоела мне проблема со вставкой из MS Word текста на различные форумы (в том числе и в редактор от XenForo).
То кучу лишних строк добавляет сам, то пробелы съедает, то цвета и т.п.
В MS Word удобно (мне) готовить статьи и всё такое прочее.
Сделал (на коленке*) "простое", но более-менее универсальное решение: автозамена форматирования на BB-код с помощью макроса MS Word.
* подразумевается, что макрос настроен для моих нужд, если у Вас более наполеоновские аппетиты, попросите меня - я подкорректирую, что нужно.
Вот что он сейчас умеет заменять на BB-код:
- заменяет размеры шрифта MS Word (10, 12, 14, и 16-й). По-умолчанию, сделано так, чтобы не заменял 12-й шрифт (он выбран у меня как основной для всех документов).
- заменяет гиперссылки
- жирность
- курсив
- цвет красный
- цвет синий
- центрирование
- и любые комбинации этих форматов
Как это работает в целом:
1) Открываете Ваш документ с крутым оформлением, запускаете в нем макрос (ALT + F8, выполнить)
2) Копируете результат в любой простой редактор (блокнот Windows подойдет, можно и Akelpad, N++, и т.п.)
3) Копируете из блокнота текст в редактор любого форума. Победа!
Как это сделать у себя:
1) Вам нужно всего один раз выполнить п.1. этой инструкции: Как создать макрос для MS Word / MS Excel
и вставить такой код макроса:
Всё, макрос будет доступен из-под любого документа.
Примечание: если Вам нужна поддержка других размеров шрифтов, и т.п., не описанного выше, макрос нужно дорабатывать.
Выкладываю также демо (документ с разным суперформатированием и встроенный в него макрос, который вы сразу сможете проверить в работе, не забыв разрешить работу макросов для Вашей версии офиса).
Ах да, название моего макроса в списке будет "A_Replace_Into_BBcode".
Best wishes, Alex.
вообщем сильно поднадоела мне проблема со вставкой из MS Word текста на различные форумы (в том числе и в редактор от XenForo).
То кучу лишних строк добавляет сам, то пробелы съедает, то цвета и т.п.
В MS Word удобно (мне) готовить статьи и всё такое прочее.
Сделал (на коленке*) "простое", но более-менее универсальное решение: автозамена форматирования на BB-код с помощью макроса MS Word.
* подразумевается, что макрос настроен для моих нужд, если у Вас более наполеоновские аппетиты, попросите меня - я подкорректирую, что нужно.
Вот что он сейчас умеет заменять на BB-код:
- заменяет размеры шрифта MS Word (10, 12, 14, и 16-й). По-умолчанию, сделано так, чтобы не заменял 12-й шрифт (он выбран у меня как основной для всех документов).
- заменяет гиперссылки
- жирность
- курсив
- цвет красный
- цвет синий
- центрирование
- и любые комбинации этих форматов
Как это работает в целом:
1) Открываете Ваш документ с крутым оформлением, запускаете в нем макрос (ALT + F8, выполнить)
2) Копируете результат в любой простой редактор (блокнот Windows подойдет, можно и Akelpad, N++, и т.п.)
3) Копируете из блокнота текст в редактор любого форума. Победа!
Как это сделать у себя:
1) Вам нужно всего один раз выполнить п.1. этой инструкции: Как создать макрос для MS Word / MS Excel
и вставить такой код макроса:
VB.NET / VBA:
Option Explicit
Private Enum TEXT_PROPERTY
TEXT_BOLD = 1
TEXT_ITALIC
TEXT_SIZE_10 = 10
TEXT_SIZE_12 = 12
TEXT_SIZE_14 = 14
TEXT_SIZE_16 = 16
TEXT_RED
TEXT_BLUE
TEXT_CENTER
End Enum
Private Type POSITION_CONTEXT
BEG As String
END As String
End Type
Private Type BB_TAG_CODE
BOLD As POSITION_CONTEXT
ITALIC As POSITION_CONTEXT
TEXT_SIZE_10 As POSITION_CONTEXT
TEXT_SIZE_12 As POSITION_CONTEXT
TEXT_SIZE_14 As POSITION_CONTEXT
TEXT_SIZE_16 As POSITION_CONTEXT
COLOR_RED As POSITION_CONTEXT
COLOR_BLUE As POSITION_CONTEXT
POS_CENTER As POSITION_CONTEXT
End Type
Private Const DEFAULT_SIZE = TEXT_SIZE_12 'размер текста по-умолчанию
Public TAG As BB_TAG_CODE
' заполнение соответствий форматирования MS Word и BB-кодам
Private Sub Mapping_Init()
With TAG
.BOLD.BEG = "[b]"
.BOLD.END = "[/b]"
.ITALIC.BEG = "[i]"
.ITALIC.END = "[/i]"
.TEXT_SIZE_10.BEG = "[size=3]"
.TEXT_SIZE_10.END = "[/size]"
.TEXT_SIZE_12.BEG = "[size=4]"
.TEXT_SIZE_12.END = "[/size]"
.TEXT_SIZE_14.BEG = "[size=5]"
.TEXT_SIZE_14.END = "[/size]"
.TEXT_SIZE_16.BEG = "[size=6]"
.TEXT_SIZE_16.END = "[/size]"
.COLOR_RED.BEG = "[color=red]"
.COLOR_RED.END = "[/color]"
.COLOR_BLUE.BEG = "[color=blue]"
.COLOR_BLUE.END = "[/color]"
.POS_CENTER.BEG = "[center]"
.POS_CENTER.END = "[/center]"
End With
End Sub
Public Sub A_Replace_Into_BBcode()
Dim Style1
Dim Style2
Dim Style3
Dim Style4
Dim Style5
Dim hh As Hyperlink, i&
With ActiveDocument.Hyperlinks
For i = .Count To 1 Step -1
Set hh = .Item(i)
hh.TextToDisplay = "[url=" & hh.Address & "]" & IIf(hh.TextToDisplay = "", "X", hh.TextToDisplay) & "[/url]"
hh.Delete
Next
End With
Call Mapping_Init
For Each Style1 In Array(TEXT_BOLD, 0)
For Each Style2 In Array(TEXT_ITALIC, 0)
For Each Style3 In Array(TEXT_SIZE_10, TEXT_SIZE_12, TEXT_SIZE_14, TEXT_SIZE_16)
For Each Style4 In Array(TEXT_RED, TEXT_BLUE, 0)
For Each Style5 In Array(TEXT_CENTER, 0)
StyleToBB Style1, Style2, Style3, Style4, Style5
Next
Next
Next
Next
Next
End Sub
Private Sub StyleToBB(ParamArray Styles())
'ActiveDocument.Range.Select
'Selection.WholeStory
Dim Style, BB_Beg$, BB_End$, BB_Beg_Concat$, BB_End_Concat$
With Selection.Find
.ClearFormatting
For Each Style In Styles
BB_Beg = ""
BB_End = ""
Select Case CLng(Style)
Case TEXT_BOLD
.Font.BOLD = True
.Replacement.Font.BOLD = False
BB_Beg = TAG.BOLD.BEG
BB_End = TAG.BOLD.END
Case TEXT_ITALIC
.Font.ITALIC = True
.Replacement.Font.ITALIC = False
BB_Beg = TAG.ITALIC.BEG
BB_End = TAG.ITALIC.END
Case TEXT_SIZE_10
.Font.Size = 10
.Replacement.Font.Size = DEFAULT_SIZE
BB_Beg = TAG.TEXT_SIZE_10.BEG
BB_End = TAG.TEXT_SIZE_10.END
Case TEXT_SIZE_12
.Font.Size = 12
.Replacement.Font.Size = DEFAULT_SIZE
BB_Beg = TAG.TEXT_SIZE_12.BEG
BB_End = TAG.TEXT_SIZE_12.END
Case TEXT_SIZE_14
.Font.Size = 14
.Replacement.Font.Size = DEFAULT_SIZE
BB_Beg = TAG.TEXT_SIZE_14.BEG
BB_End = TAG.TEXT_SIZE_14.END
Case TEXT_SIZE_16
.Font.Size = 16
.Replacement.Font.Size = DEFAULT_SIZE
BB_Beg = TAG.TEXT_SIZE_16.BEG
BB_End = TAG.TEXT_SIZE_16.END
Case TEXT_RED
.Font.Color = wdColorRed
.Replacement.Font.Color = wdColorAutomatic
BB_Beg = TAG.COLOR_RED.BEG
BB_End = TAG.COLOR_RED.END
Case TEXT_BLUE
.Font.Color = wdColorBlue
.Replacement.Font.Color = wdColorAutomatic
BB_Beg = TAG.COLOR_BLUE.BEG
BB_End = TAG.COLOR_BLUE.END
Case TEXT_CENTER
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Replacement.ParagraphFormat.Alignment = wdAlignParagraphLeft
BB_Beg = TAG.POS_CENTER.BEG
BB_End = TAG.POS_CENTER.END
End Select
If Style <> DEFAULT_SIZE Then
BB_Beg_Concat = BB_Beg & BB_Beg_Concat$
BB_End_Concat = BB_End_Concat & BB_End
End If
Next
.Replacement.Text = BB_Beg_Concat & "^&" & BB_End_Concat
.Execute FindText:="", Replace:=wdReplaceAll, Wrap:=wdFindContinue
End With
End Sub
Всё, макрос будет доступен из-под любого документа.
Примечание: если Вам нужна поддержка других размеров шрифтов, и т.п., не описанного выше, макрос нужно дорабатывать.
Выкладываю также демо (документ с разным суперформатированием и встроенный в него макрос, который вы сразу сможете проверить в работе, не забыв разрешить работу макросов для Вашей версии офиса).
Ах да, название моего макроса в списке будет "A_Replace_Into_BBcode".
Best wishes, Alex.
Вложения
Последнее редактирование: