Seite 1 von 1

[gelöst] Makro (writer) Fußnoten umwandeln

Verfasst: Do 11. Mär 2021, 16:42
von Jakob Krake
Salut,
ich möchte ein Makro schreiben, dass die Fußnoten in einem Writer-Dokument in normalen Text umwandelt und ans Ende des Dokuments setzt.

Ich habe es bereits geschafft, den Text der Fußnoten auszulesen und ans Ende des Dokuments zu schreiben, aber ich weiß nicht wie ich den Fußnotenanker durch eine „normale Zahl“ ersetzen soll.
Also, z.B. „Beispiel²“ durch „Beispiel(2)“ oder „wie geht das nur?³“ durch „wie geht das nur?(3)“ usw.

Wahrscheinlich würde es reichen, wenn mir jemand sagen könnte, wie ich den Fußnotenanker in einem Text finden kann.

Vielen Dank, JK

P.S. Weil ich nicht weiß, wie ich innerhalb dieses Beitrags ein eigenes Fenster kreieren kann, füge ich meinen Makrocode als normalen Text ein.


REM ***** BASIC *****

Option Explicit
Option Base 1

Sub Main
FussnotenAnsTextende()
RemoveAllFootnotes()
End Sub

Sub FussnotenAnsTextende()
REM Diese Subroutine schreibt den Inhalt aller Fussnoten an das Textende
Dim oDescriptor 'Der Suchdeskriptor
Dim oFound 'Der Trefferrange
Dim Doc As Object
Dim Cursor As Object
Doc = StarDesktop.CurrentComponent
Cursor = ThisComponent.Text.createTextCursor()
Dim A%

A = 1
oDescriptor = ThisComponent.createSearchDescriptor()
With oDescriptor
.SearchString = "Fußnote"
.SearchStyles = True
.SearchWords = True
.SearchCaseSensitive = False

End With
' Der erste Treffer
oFound = ThisComponent.findFirst(oDescriptor)
Cursor.gotoEnd(False)

Do While Not IsNull (oFound)
Cursor.Text.insertControlCharacter(Cursor, _
com.sun.star.text.ControlCharacter.LINE_BREAK, False)
Cursor.Text.insertString(Cursor,A,False)
Cursor.Text.insertString(Cursor,") ",False)
Cursor.Text.insertString(Cursor,oFound.getString(),False)

oFound.CharWeight = com.sun.star.awt.FontWeight.NORMAL
oFound = ThisComponent.findNext(oFound.End, oDescriptor)
A=a+1

Loop
End Sub

REM Hier fehlt die Subroutine, die Fussnotenzanker "²" durch "(2)" usw. ersetzt.


Sub RemoveAllFootnotes()
REM Diese Subroutine löscht alle Fußnoten.
Dim oDocument as Object
Dim oAllFootnotes as Object
Dim oFootnote as Object
Dim i as integer

oDocument = ThisComponent
oAllFootnotes = oDocument.getFootnotes()

For i = oAllFootnotes.Count - 1 to 0 step -1
oFootnote = oAllFootnotes(i)
oFootnote.dispose()
Next i

End Sub

Re: Makro (writer) Fußnoten umwandeln

Verfasst: Do 11. Mär 2021, 18:36
von mikele
Hallo,
um Text als Codeblock zu schreiben gibt es den Button "</>" der dann die entsprechenden Tags "

Code: Alles auswählen

 CODE 
" setzt.
Dein ganzen problem ließe sich durch folgendes Makro lösen

Code: Alles auswählen

Sub Main
	oDoc=ThisComponent
	oFootnotes = ThisComponent.getFootnotes()
	n=ofootnotes.count-1
	dim anote(n)
	for i=n to 0 step -1
		oObj1 = oFootnotes.getByIndex(i)
		anote(i)=oobj1.string
		oAnchor = oobj1.getAnchor()
		snr=oanchor.string
		oanchor.string="(" & snr & ")"
	next
	oCursor = oDoc.Text.createTextCursor()
	oCursor.gotoEnd(False)
	for i=0 to n
		oCursor.Text.insertControlCharacter(oCursor, com.sun.star.text.ControlCharacter.LINE_BREAK, False)
		oCursor.Text.insertString(oCursor,i+1 & ") " & anote(i),False)
	next
End Sub
Sinnvoller wäre natürlich die Nummerierung am Ende durch eine Nummerierungsvorlage zu erledigen.
Vielleicht willst du auch aus den Fußnoten Endnoten machen?

Re: [gelöst] Makro (writer) Fußnoten umwandeln

Verfasst: So 14. Mär 2021, 12:46
von Jakob Krake
Hallo mikele,
vielen Dank, das ist genau das was ich wollte. So einfach, wenn man weiß wie es geht. Ich werde mir Deinen Code auch noch genauer anschaue, damit ich aus der Sache etwas lerne.
Also noch ein mal vielen Dank,
JK