Tabellen Kopfzeilen-Text ändern

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

Moderator: Moderatoren

pkuenemann
Beiträge: 6
Registriert: Di, 30.04.2019 09:21

Tabellen Kopfzeilen-Text ändern

Beitrag von pkuenemann » Sa, 11.05.2019 20:40

Ich versuche, bei einem Tabellen-Dokument den Text der Kopfzeile zu bearbeiten, laufe aber auf eine Exception...

Code: Alles auswählen

Private Sub ReplaceCalcFields()
On Error GoTo Exit_ReplaceCalcFields

    Dim StyleFamilies As Object
    Dim PageStyles As Object
    Dim DefPage As Object
    Dim HText As Object
    Dim txt As String
    
    Set StyleFamilies = objDocument.StyleFamilies
    Set PageStyles = StyleFamilies.getByName("PageStyles")
    Set DefPage = PageStyles.getByName("Default")
    If DefPage.HeaderIsOn Then
        Set HText = DefPage.HeaderText.GetString()
        'txt = DefPage.HeaderText.GetString()
    End If

Exit_ReplaceCalcFields:
    On Error Resume Next
    Set HText = Nothing
    Set DefPage = Nothing
    Set PageStyles = Nothing
    Set StyleFamilies = Nothing
    Exit Sub

End Sub
...und zwar in der Zeite 'Set HText = DefPage.HeaderText.GetString()', also beim Zugriff auf den HeaderText. Auch die Variante 'txt = DefPage.HeaderText.GetString()' bringt einen Fehler. Der Debugger gibt an, dass das Objekt DefPage.HeaderText nicht existiert. Hat jemand eine Ahnung, was ich falsch mache? Ich bin dankbar für jede Hilfe.

LG, Lemmi.

Benutzeravatar
Faol
****
Beiträge: 122
Registriert: Di, 26.01.2016 21:18

Re: Tabellen Kopfzeilen-Text ändern

Beitrag von Faol » Sa, 11.05.2019 21:41

Hallo Lemmi,

zunächst fehlte in Deinem Code die Instanzierung des Dokuments.
objDocument=ThisComponent
Dies hatte zur Folge, dass auch die anderen Objekte nicht instanziert werden konnten

Code: Alles auswählen

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

Private Sub ReplaceCalcFields()
'On Error GoTo Exit_ReplaceCalcFields
	Dim objDocument as Object
    Dim StyleFamilies As Object
    Dim PageStyles As Object
    Dim DefPage As Object
    Dim HContentRight as Object
    Dim HTextC as Object

    Dim sTxt As String
	
	' Objektreferenz für das aktuelle Dokument
    objDocument=ThisComponent
	
    sTxt="Hallo"
    
    StyleFamilies = objDocument.StyleFamilies
    	PageStyles = StyleFamilies.getByName("PageStyles")
		    DefPage = PageStyles.getByName("Default")
		    ' oder auch
		    ' DefPage = PageStyles.getByName("Standard")	    

    If DefPage.HeaderIsOn=true Then
 mri Defpage

REM ----------------------------------------------------------------------------------------
REM >>> Inhalt Kopfzeile zuweisen <<<
' 
HContentRight = DefPage.RightPageHeaderContent 
	HTextC = HContentRight.CenterText	' Kopfzeile -> Mitte
REM Weitere Konstanten:
'HTextL = HContentRight.LeftText		' Kopfzeile -> Links
'HTextR = HContentRight.RightText		' Kopfzeile -> Rechts
	
REM Wenn die linke und rechte Seite des Dokument unterschiedliche
REM Kopfzeilen beinhalten sollen, dann muss die Eigenschaft im 
REM Menü Format → Seite → Register "Seite" → Lauyouteigenschaften → Seitenlayout
REM eingestellt werden. 
'HContentLeft = DefPage.LeftPageHeaderContent

REM Welcher Text?
HTextC.setString(sTxt & " --- Ich bin in der Mitte")
	defpage.rightPageHeaderContent = HContentRight
REM ----------------------------------------------------------------------------------------

    End If
'Exit_ReplaceCalcFields:
'    On Error Resume Next
'    Set HText = Nothing
'    Set DefPage = Nothing
'    Set PageStyles = Nothing
'    Set StyleFamilies = Nothing
'    Exit Sub

End Sub

Ob mein Code nun Deinen Wünschen entspricht?
Gruß
Faol
⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.2.3.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

pkuenemann
Beiträge: 6
Registriert: Di, 30.04.2019 09:21

Re: Tabellen Kopfzeilen-Text ändern

Beitrag von pkuenemann » Mo, 13.05.2019 13:10

Hallo Faol,

sorry, ich hatte nur einen Codeausschnitt eingefügt. Die Instanzierung der benötigten Objekte findet natürlich statt:

Code: Alles auswählen

    Dim objServiceManager As Object
    Dim objDesktop As Object
    Dim objCoreReflection As Object
    Dim objDocument As Object
    Dim outDoc As String
    Dim args()

    outDoc = "E:\Beispiel\beispiel-tabelle.ods"

    Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
    Set objCoreReflection = objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
    Set objDocument = objDesktop.loadComponentFromURL(ConvertToURL(outDoc), "_blank", 0, args)

    ReplaceCalcFields

    If Not objDocument Is Nothing Then Call objDocument.Close(True)
    Set objDocument = Nothing

    If Not objCoreReflection Is Nothing Then objCoreReflection.dispose
    If Not objDesktop Is Nothing Then objDesktop.Terminate

    Set objCoreReflection = Nothing
    Set objDesktop = Nothing
    Set objServiceManager = Nothing
Zu Deinen Ergänzungen: was bedeutet die Zeile:

Code: Alles auswählen

    mri Defpage
Ansonsten habe ich keine unterschiedlichen Kopfzeilen für rechts und links eingestellt sondern nur eine für alle Seiten (Bei Format-Seite ist die Option "Beide Seiten Gleich" aktiviert). Wie lauten dann der Zugriff auf den Header-Content, 'PageHeaderContent'?

LG,
Lemmi.

pkuenemann
Beiträge: 6
Registriert: Di, 30.04.2019 09:21

Re: Tabellen Kopfzeilen-Text ändern

Beitrag von pkuenemann » Mo, 13.05.2019 16:03

...habe es selber herausgefunden: es ist RightPageHeaderContent()

Läuft jetzt. Herzlichen Dank!

Benutzeravatar
Faol
****
Beiträge: 122
Registriert: Di, 26.01.2016 21:18

Re: Tabellen Kopfzeilen-Text ändern

Beitrag von Faol » Mo, 13.05.2019 17:17

Hallo Lemmi,
Lemmi hat geschrieben:Zu Deinen Ergänzungen: was bedeutet die Zeile: MRI...
MRI ist ein Code-Inspektionstool. Eine Extension für die Basic-IDE.
Außer MRI gibt es XRAY, im Prinzip mit den gleichen Funktionen.
Ich habe bei mir beide Tools installiert, nutze aber hauptsächlich MRI.
Ist aber eher Geschmackssache welches Tool Du nutzt.
Info: MRI wird für neuere LibreOffice-Versionen nicht mehr weiterentwickelt.
  1. Die Extension: "MRI"
  2. Die Extension: "XRAY"
Zu 1
Es gibt unterschiedliche Versionen für Openoffice und für Libreoffice!
Bei parallel installierten Office muss die jeweilig passende Extension installiert werden.
1a) MRI für Openoffice mri-uno-object-inspection-tool
1b) MRI für Libreoffice MRI 1.3.3 Extension für Libreoffice
Für LibO gibt es noch eine finale Version MRI 1.3.4, die Adresse habe ich gerade nicht parat.

Zu 2)
XRAY läuft unter beiden Office's
Siehe diese Seite unter XRAY Tool >>> "X-Ray tool von Bernard Marcelly"

ODER
XRAY-Tool Extension
Letzteres ist eine Writer-Dokument, mit einer deutschen Anleitung zur Installation und Verwendung.

Nachfolgenden Code kannst Du nutzen, um beide Extensions direkt
bei Start von Openoffice/ LibreOffice zu laden.

Code: Alles auswählen

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

REM Bibliotheken bei LibreOffice-Start laden
Sub LoadingLibraries

	' Hier in der Basic-IDE -> Objektkatalog
	' LibreOffice Makros & Dialoge -> Tools
'	Globalscope.BasicLibraries.LoadLibrary ( "Tools")
	' load TOOLS library with helper function
	If NOT GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) Then
	   GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
	End If
		'https://extensions.openoffice.org/en/project/mri-uno-object-inspection-tool
		' Für Libreoffice: https://extensions.openoffice.org/en/projectrelease/mri-uno-object-inspection-tool-133
		Globalscope.BasicLibraries.LoadLibrary ( "MRILib")
	
			' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial
			'http://berma.pagesperso-orange.fr/Files_en/XrayTool60_de.odt
			GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
End Sub
Den Code habe ich bei mir im Objektkatalog unter:
Meine Makros/Standard
in einem neuen Modul abgelegt.
Dann
Menü Extras/Anpassen
Register "Ereignisse"

Ganz unten im DropDown-Menü muss unbedingt zuerst unter Speichern in: OpenOffice ausgwählt sein.
Nun weiter oben unter Ereignis: Programmstart dieses Makro zuweisen.
Klick auf Button Makro und wähle das Makro.
Nun muss AOO neugestartet werden, damit werden dann automatisch die Extensions geladen.
Hinweis:

Code: Alles auswählen

 GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
Diese Anweisung im Code lädt automatisch die Standardbibliothek "Tools",
welche Bestandteil von AOO/LibO ist, welche bereits bei der Installation
des jeweiligen Office-Pakets mit installiert wird.
Durch diese Anweisung, kann man direkt aus seinem eigenen Code heraus, auf
vordefinierte Funktionen und Makros zu greifen.
z.B. FileNameOutOfPath
Siehe weitere Funktionen und Makros Objektkatalog in Bibliothek:
OpenOfficeMakros\Tools

MRI Muster:
MRI.odt
(128.65 KiB) 38-mal heruntergeladen
Gruß
Faol
⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.2.3.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

Antworten