The following macro will (crudely) reformat a Microsoft Word document into a WIKI document.

Capabilities

The following changes are made:

  • Heading Level Changes. A line with style Heading 1 is converted to a line with ```` on both sides. Similarly for other heading levels.
  • Bold. Bold text is bracketed with ````. * Underline. Underlined text is bracketed with ````. * Italics. Italicized text is bracketed with ````. * Tables. Tables are converted to the appropriate form with ``||`` between columns.
    Known Issues
    * Tables with a cell that spans more than one row will produce an error.
    * Superscripts and subscripts convert to ```` or ```` but that is not supported.
    * Two or more of the same heading lines (e.g., a Heading Level 1 line followed immediately by another Heading Level 1 line) do not convert correctly. The ```` signs are not placed correctly.
    * Issues with empty text being bolded `` `` is often misinterpreted as a heading 2 and has to be manually cleaned up.
    Installing the Macro
    # Open Word.
    # Click on New Macro (how depends on your version).
    # Enter WordToWIKI as the macro name.
    # Cut and past the text below, replacing the text that is already there.
    # Save.
    Macro
    code format"vb"
    Public Sub Word2Wiki()
    Application.ScreenUpdating False
    ReplaceQuotes
    MediaWikiEscapeChars
    MediaWikiConvertHyperlinks
    MediaWikiConvertH1
    MediaWikiConvertH2
    MediaWikiConvertH3
    MediaWikiConvertH4
    MediaWikiConvertH5
    MediaWikiConvertItalic
    MediaWikiConvertBold
    MediaWikiConvertUnderline
    MediaWikiConvertStrikeThrough
    MediaWikiConvertSuperscript
    MediaWikiConvertSubscript
    MediaWikiConvertLists
    MediaWikiConvertTables
    ' Copy to clipboard
    ActiveDocument.Content.Copy
    Application.ScreenUpdating True
    End Sub
    Private Sub MediaWikiConvertH1()
    ReplaceHeading wdStyleHeading1, “”
    End Sub
    Private Sub MediaWikiConvertH2()
    ReplaceHeading wdStyleHeading2, “”
    End Sub
    Private Sub MediaWikiConvertH3()
    ReplaceHeading wdStyleHeading3, “”
    End Sub
    Private Sub MediaWikiConvertH4()
    ReplaceHeading wdStyleHeading4, “”
    End Sub
    Private Sub MediaWikiConvertH5()
    ReplaceHeading wdStyleHeading5, “”
    End Sub
    Private Sub MediaWikiConvertBold()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.Bold True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore “
    .InsertAfter “

    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.Bold False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertItalic()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.Italic True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore “

    .InsertAfter “
    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.Italic False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertUnderline()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.Underline True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore “
    .InsertAfter “

    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.Underline False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertStrikeThrough()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.StrikeThrough True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore (“”)
    .InsertAfter (“”)
    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.StrikeThrough False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertSuperscript()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.Superscript True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    .Text Trim(.Text)
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore (“”)
    .InsertAfter (“”)
    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.Superscript False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertSubscript()
    ActiveDocument.Select
    With Selection.Find
    .ClearFormatting
    .Font.Subscript True
    .Text “”
    .Format True
    .MatchCase False
    .MatchWholeWord False
    .MatchWildcards False
    .MatchSoundsLike False
    .MatchAllWordForms False
    .Forward True
    .Wrap wdFindContinue
    Do While .Execute
    With Selection
    .Text Trim(.Text)
    If Len(.Text) > 1 And InStr(1, .Text, vbCr) Then
    ' Just process the chunk before any newline characters
    ' We'll pick-up the rest with the next search
    .Collapse
    .MoveEndUntil vbCr
    End If
    ' Don't bother to markup newline characters (prevents a loop, as well)
    If Not .Text vbCr Then
    .InsertBefore (“”)
    .InsertAfter (“”)
    End If
    .Style ActiveDocument.Styles(“Default Paragraph Font”)
    .Font.Subscript False
    End With
    Loop
    End With
    End Sub
    Private Sub MediaWikiConvertLists()
    Dim para As Paragraph
    For Each para In ActiveDocument.ListParagraphs
    With para.Range
    .InsertBefore “ ”
    For i 1 To .ListFormat.ListLevelNumber
    If .ListFormat.ListType wdListBullet Then
    .InsertBefore “*”
    Else
    .InsertBefore “#”
    End If
    Next i
    .ListFormat.RemoveNumbers
    End With
    Next para
    End Sub
    Private Sub MediaWikiConvertTables()
    Dim thisTable As Table
    For Each thisTable In ActiveDocument.Tables
    With thisTable
    For Each aRow In thisTable.Rows
    With aRow
    For Each aCell In aRow.Cells
    With aCell
    aCell.Range.InsertBefore “|| ”
    'aCell.Range.InsertAfter “ |”
    End With
    Next aCell
    'aRow.Range.InsertBefore “|”
    aRow.Range.InsertAfter “ ||” ' + vbCrLf End With Next aRow '.Range.InsertBefore “|” '.Range.InsertAfter “|” + vbCrLf .ConvertToText “” End With Next thisTable End Sub Private Sub MediaWikiConvertHyperlinks() Dim hyperCount As Integer hyperCount ActiveDocument.Hyperlinks.Count For i 1 To hyperCount With ActiveDocument.Hyperlinks(1) Dim addr As String addr .Address .Delete If InStr(addr, “@”) > 1 Then .Range.InsertBefore “" & addr & "” End With Next i End Sub ' Replace all smart quotes with their dumb equivalents Private Sub ReplaceQuotes() Dim quotes As Boolean quotes Options.AutoFormatAsYouTypeReplaceQuotes Options.AutoFormatAsYouTypeReplaceQuotes False ReplaceString ChrW(8220), “”“” ReplaceString ChrW(8221), “”“” ReplaceString “‘”, “'” ReplaceString “’”, “'” Options.AutoFormatAsYouTypeReplaceQuotes quotes End Sub Private Sub MediaWikiEscapeChars() 'EscapeCharacter “*” 'EscapeCharacter “#” 'EscapeCharacter “_” 'EscapeCharacter “-” 'EscapeCharacter “+” 'EscapeCharacter “{” 'EscapeCharacter “}” 'EscapeCharacter “[” 'EscapeCharacter “]” EscapeCharacter “~” EscapeCharacter “^^” 'EscapeCharacter “|” 'EscapeCharacter “'” End Sub Private Function ReplaceHeading(styleHeading As String, headerPrefix As String) Dim normalStyle As Style Set normalStyle ActiveDocument.Styles(wdStyleNormal) ActiveDocument.Select With Selection.Find .ClearFormatting .Style ActiveDocument.Styles(styleHeading) .Text “” .Format True .MatchCase False .MatchWholeWord False .MatchWildcards False .MatchSoundsLike False .MatchAllWordForms False .Forward True .Wrap wdFindContinue Do While .Execute With Selection If InStr(1, .Text, vbCr) Then ' Just process the chunk before any newline characters ' We'll pick-up the rest with the next search .Collapse .MoveEndUntil vbCr End If ' Don't bother to markup newline characters (prevents a loop, as well) If Not .Text vbCr Then .InsertBefore headerPrefix .InsertBefore vbCr .InsertAfter headerPrefix End If .Style normalStyle End With Loop End With End Function Private Function EscapeCharacter(char As String) ReplaceString char, “\” & char End Function Private Function ReplaceString(findStr As String, replacementStr As String) Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text findStr .Replacement.Text replacementStr .Forward True .Wrap wdFindContinue .Format False .MatchCase False .MatchWholeWord False .MatchWildcards False .MatchSoundsLike False .MatchAllWordForms False End With Selection.Find.Execute Replace:wdReplaceAll End Function <code>
You could leave a comment if you were logged in.