Fußnoten und dazugehörigen Absatzinhalt per Makro auslesen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fußnoten und dazugehörigen Absatzinhalt per Makro auslesen

Beitrag von Stephan »

Da Du den Anker der jeweiligen Fußnoten (genauer gesagt wohl den Anker (Anchor) des Fußnotenankers (ein Feld)) bereits kennst ist das einfach:

-erzeuge einen Textcursor
-Springe mit dem Textcursor zum jeweiligen Anker (ohne zu markieren)
-springe nun zum Anfang des aktuellen Absatzes ohne zu markieren
-springe zum Ende des aktuellen Absatzes (mit Markieren)

Der String des Textcursors ist nun jeweils der gesuchte Absatztext

Code: Alles auswählen

REM  *****  BASIC  *****
REM Auflistung aller im Dokument vorhandenen Fußnoten
REM 
Dim oDocC as Object
Dim oDocW as Object
Dim oSheet as Object
Dim oRange as Object

Sub GetFootnote
Dim mArr() as Variant
Dim oCol as Object
Dim i as Long

  oDocW = ThisComponent
  oFN=oDocW.Footnotes
  oFNSettings = oDocW.getFootnoteSettings()
  
  cur = ThisComponent.Text.CreateTextCursor

	' Öffnen eines Calc-Dokuments
	oDocC = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
		' Referenzierung der "Tabelle 1"
		oSheet = oDocC.Sheets(0)
			' Zellbereich A2:B2001 zur Dinmensionierung des Array's in das Array schreiben
			mArr()=osheet.getcellrangebyposition(0,1,2,2001).getDataArray
			
	For i = 0 To oFN.Count-1
			' Spalte A
			mArr(i)(0) = oFN(i).Anchor.String
			Msgbox oFN(i).Anchor.String & CHR(13) &  oFN(i).String
			' Spalte B
			mArr(i)(1) = oFN(i).String
			' Spalte C
			cur.gotoRange(oFN(i).Anchor, False)
			cur.gotoStartofParagraph(False)
			cur.gotoEndofParagraph(True)
			mArr(i)(2) = cur.String '"Hier fehlt der Text des Absatzes"
	Next i

	' Referenz Range-Objekt (Zellbereich)
    oRange = osheet.getcellrangebyposition(0,1,2,2001)
	' Array in Zellbereich schreiben
    oRange.setDataArray(mArr)

	' Spaltenüberschrift einfügen und formatieren
    osheet.getCellRangeByName("A1").String="Index"
    osheet.getCellRangeByName("B1").String="Fußnoten"
    osheet.getCellRangeByName("C1").String="Absatzinhalt"
    osheet.getCellRangeByName("A1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("B1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("C1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("A1").charcolor = &HFF0000
    osheet.getCellRangeByName("B1").charcolor = &HFF0000 
    osheet.getCellRangeByName("C1").charcolor = &HFF0000 

	' Spaltenbreite anpassen
	oCol = oSheet.getColumns()
	oCol.optimalWidth = true

End Sub

Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fußnoten und dazugehörigen Absatzinhalt per Makro auslesen

Beitrag von F3K Total »

Moin,
Stephan war etwas schneller und hat eine etwas andere Lösung, meine sieht so aus:

Code: Alles auswählen

REM  *****  BASIC  *****
REM Auflistung aller im Dokument vorhandenen Fußnoten
Dim oDocC as Object
Dim oDocW as Object
Dim oSheet as Object
Dim oRange as Object

Sub GetFootnote
    Dim mArr() as Variant
    Dim oCol as Object
    Dim i as Long
    oDocW = ThisComponent
    oFN=oDocW.Footnotes
    oFNSettings = oDocW.getFootnoteSettings()
    'Öffnen eines Calc-Dokuments
    oDocC = StarDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, Array())
    'Referenzierung der "Tabelle 1"
    oSheet = oDocC.Sheets(0)
    'Zellbereich A2:B2001 zur Dinmensionierung des Array's in das Array schreiben
    mArr()=osheet.getcellrangebyposition(0,1,2,oFN.Count).getDataArray
    For i = 0 To oFN.Count-1
        'Spalte A
        mArr(i)(0) = oFN(i).Anchor.String
        'Spalte B
        mArr(i)(1) = oFN(i).String
        'Spalte C
        mArr(i)(2) = oFN(i).Anchor.CreateEnumeration.nextelement.String
    Next i
    'Referenz Range-Objekt (Zellbereich)
    oRange = osheet.getcellrangebyposition(0,1,2,oFN.Count)
    'Array in Zellbereich schreiben
    oRange.setDataArray(mArr)
    'Spaltenüberschrift einfügen und formatieren
    osheet.getCellRangeByName("A1").String="Index"
    osheet.getCellRangeByName("B1").String="Fußnoten"
    osheet.getCellRangeByName("C1").String="Absatzinhalt"
    osheet.getCellRangeByName("A1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("B1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("C1").CharWeight = com.sun.star.awt.FontWeight.BOLD
    osheet.getCellRangeByName("A1").charcolor = &HFF0000
    osheet.getCellRangeByName("B1").charcolor = &HFF0000 
    osheet.getCellRangeByName("C1").charcolor = &HFF0000 
    'Spaltenbreite anpassen
    oCol = oSheet.getColumns()
    oCol.optimalWidth = true
    oColC = oCol.getbyname("C")
    oColC.IsTextWrapped= True
End Sub

Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fußnoten und dazugehörigen Absatzinhalt per Makro auslesen

Beitrag von Stephan »

Stephan war etwas schneller und hat eine etwas andere Lösung,
Deine Lösung ist nicht nur einfacher, sondern auch interessanter.
Ich hatte nur nicht vermutet das es so gehen könnte und habe das deshalb garnicht probiert.


Gruß
Stephan
Antworten