Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Rem 1) select the text lines representing a table whose columns are separated by the tab character
- Rem 2) run this macro
- Rem 3) result: the tab characters are replaced by two or more space characters such a way each column
- Rem has the same number of characters
- Rem 4) you may then copy/paste those text lines inside HTML <pre>...</pre> it will look like a table
- Sub tabs_to_spaces()
- Dim par As Paragraph
- Dim pars() As Paragraph
- Dim arr(50) As Integer ' 50 tabs maximum per line
- Application.ScreenUpdating = False
- max_ztab = -1
- For Each par In Selection.Paragraphs
- old_x = 1
- ztab = LBound(arr)
- Do While old_x <> 0
- x = InStr(old_x, par.Range.Text, Chr(9))
- If x = 0 Then
- zlen = Len(par.Range.Text) - old_x + 1
- Else
- zlen = x - old_x
- End If
- If zlen > arr(ztab) Then arr(ztab) = zlen
- If ztab > max_ztab Then max_ztab = ztab
- ztab = ztab + 1
- If x = 0 Then
- Exit Do
- Else
- old_x = x + 1
- End If
- Loop
- Next
- ReDim pars(Selection.Paragraphs.Count)
- For i = 1 To Selection.Paragraphs.Count
- Set pars(i) = Selection.Paragraphs(i)
- Next
- For i = 1 To UBound(pars)
- Set par = pars(i)
- old_x = 1
- ztab = LBound(arr)
- Do
- x = InStr(old_x, par.Range.Text, Chr(9))
- If x = 0 Then
- Exit Do
- End If
- Call par.Range.Characters(x).Delete
- zlen = arr(ztab) - (x - old_x) + 2 ' + 2 spaces between each column
- ztab = ztab + 1
- Call par.Range.Characters(x).InsertBefore(Space(zlen))
- old_x = x + zlen
- Loop
- Next
- Application.ScreenUpdating = True
- End Sub
- Sub tabs_to_markdown()
- Dim par As Paragraph
- Dim pars() As Paragraph
- Dim arr(50) As Integer ' 50 tabs maximum per line
- Application.ScreenUpdating = False
- ' calculate array "arr" containing column widths, and max_ztab
- max_ztab = -1
- For Each par In Selection.Paragraphs
- old_x = 1
- ztab = LBound(arr)
- Do While old_x <> 0
- x = InStr(old_x, par.Range.Text, Chr(9))
- If x = 0 Then
- zlen = Len(par.Range.Text) - old_x + 1
- Else
- zlen = x - old_x
- End If
- If zlen > arr(ztab) Then arr(ztab) = zlen
- If ztab > max_ztab Then max_ztab = ztab
- ztab = ztab + 1
- If x = 0 Then
- Exit Do
- Else
- old_x = x + 1
- End If
- Loop
- Next
- ReDim pars(Selection.Paragraphs.Count)
- For i = 1 To Selection.Paragraphs.Count
- Set pars(i) = Selection.Paragraphs(i)
- Next
- For i = 1 To UBound(pars) ' CAUTION must be 1, not lbound(pars)
- Set par = pars(i)
- Call par.Range.InsertBefore("| ")
- old_x = 1 + Len("| ")
- ztab = LBound(arr)
- While old_x < par.Range.Characters.Count
- ' get the position of the next TAB character
- x = InStr(old_x, par.Range.Text, Chr(9))
- If x <> 0 Then
- ' delete the TAB character
- Call par.Range.Characters(x).Delete
- Else
- x = par.Range.Characters.Count
- End If
- ' insert
- column_right = Space(arr(ztab) - (x - old_x) + 1) + "| "
- Call par.Range.Characters(x).InsertBefore(column_right)
- old_x = x + Len(column_right)
- ' next column
- ztab = ztab + 1
- Wend
- Next
- Application.ScreenUpdating = True
- End Sub
Add Comment
Please, Sign In to add comment