hello @spookygryph,
[edit]
‘It’s pretty unreal that libreoffice doesn’t have a built in way to simply convert numbers to ordinals.’
indeed, looks like it has, most likely it’s blocked by your language settings,
it didn’t work for me with some german settings in the options, just played a little with language settings,
user interface: english (UK),
locale setting: english (UK),
default language: english (UK) and
enhanced language support: 'ignore system input language’
made it for me, ‘upping’ works on typing and on apply … didn’t counter check which option is neccessary and which isn’t, just try yourself …
- this is the disadvantage if the professionals and developers are so busy that beginners have to provide support … they have to work hard to acquire the necessary ‘half-knowledge’ themselves …
ok?
[/edit]
if you like to jump into the ‘macro hell’ you may try it with something like the following …
i didn’t find a format code option for ctrl-h 
(it’s (nearly) just the recorded sh.t macro recording produces, our macro-popes can tell you that and what of it isn’t neccessary, but for a one time job … just let it run)
either wrap it into a loop, or just hold down F8 while in macro editor,
careful! - it ‘toggles’,
be aware - it’s only for 1st → 1st, you need to adapt it for the other tasks,
sub reformat
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 0
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = "1st"
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = ""
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1073744128
args1(18).Name = "SearchItem.Command"
args1(18).Value = 0
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1
args1(21).Name = "Quiet"
args1(21).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SuperScript", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:SuperScript", "", 0, Array())
rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Count"
args5(0).Value = 1
args5(1).Name = "Select"
args5(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args5())
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args5())
rem ----------------------------------------------------------------------
dim args8(1) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Count"
args8(0).Value = 2
args8(1).Name = "Select"
args8(1).Value = true
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args8())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SuperScript", "", 0, Array())
end sub 'reformat
[edit] added superscript on/off to catch the case of correctly formatted items … did i say macro hell? … did i say ‘toggles’? … and something about precise descriptions? [/edit]
P.S. ‘solved hooks’ and ‘likes’ welcome (if answered click the grey hook top left green, if ‘good’ upvote by clicking the “^” above it) … if you need to add info: edit your question or add a comment, don’t! answer, answer only if you found an appr. answer! …