Seite 1 von 1

Makro - wo ist der Fehler

Verfasst: Do 22. Aug 2019, 09:16
von LibreUser321
Hallo zusammen,
ich habe ein Makro aufgezeichet mit dem ich folgende Schritte ausführen möchte:
1. Tabellenblatt markieren - funktioniert
2. Schrift auf Courier 12 ändern - funktioniert
3. Spaltenbreite anpassen - funktioniert nicht
Wer kann mir helfen?
Gruß Ulrich

sub Courier12
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(4) as new com.sun.star.beans.PropertyValue
args2(0).Name = "CharFontName.StyleName"
args2(0).Value = ""
args2(1).Name = "CharFontName.Pitch"
args2(1).Value = 1
args2(2).Name = "CharFontName.CharSet"
args2(2).Value = -1
args2(3).Name = "CharFontName.Family"
args2(3).Value = 2
args2(4).Name = "CharFontName.FamilyName"
args2(4).Value = "Courier New"

dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(2) as new com.sun.star.beans.PropertyValue
args3(0).Name = "FontHeight.Height"
args3(0).Value = 12
args3(1).Name = "FontHeight.Prop"
args3(1).Value = 100
args3(2).Name = "FontHeight.Diff"
args3(2).Value = 0

dispatcher.executeDispatch(document, ".uno:FontHeight", "", 0, args3())


end sub

Re: Makro - wo ist der Fehler

Verfasst: Fr 23. Aug 2019, 06:51
von Mondblatt24
Hallo,
versuch es bei LibreOffice Programmierung.

Gruß Peter

Re: Makro - wo ist der Fehler

Verfasst: Fr 23. Aug 2019, 17:05
von craig
Hallo Ulrich,

das Aufzeichnen von Makros ist so eine Sache. Es gibt nicht für alles Dispatch-Commands
oder der Recorder kann diese nicht automatisch erfassen.
Deshalb habe ich mir das Programmieren beigebracht.

Und hier ein Makro auf Basis der LibO-API:

Code: Alles auswählen

REM  *****  BASIC  *****
' Erzwingt die Deklaration und korrekte schreibweise der Variablen
Option Explicit

Sub Courier12
' Deklaration der Variablen
Dim oDoc as Object			' Das Dokument-Object
Dim oSheet1 as Object		' Das Tabellenblatt-Object
Dim oCC as Object			' Das Object des CurrentControllers
Dim oSel as Object			' Das Object der gewünschten Selektion (Markierung)
Dim oCol as Object			' Das Spalten-Object
Dim oCell as Object			' Das Zellen-Object

	' Dokument Referenz
	oDoc=ThisComponent
		' Referenz CurrentController
		oCC = oDoc.getcurrentcontroller()
	
			' Referenz aktives Tabellenblatt
			oSheet1=oCC.Activesheet
				' Alle Zellen markieren
				oCC.select(oSheet1)
				
				' Referenz der aktuellen Markierung		
				oSel = oDoc.getCurrentSelection()

			' Die Eigenschaften für die aktuelle Markierung setzen
			With oSel
				.CharFontName="Courier New"
				.CharHeight="12"
				
				'https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/FontWeight.html
				' constants group FontWeight
				' Die Konstanten müssen in Großbuchtsaben angegeben werden!!!

				'DONTKNOW		The font weight is not specified/known.  
				'THIN			specifies a 50% font weight.  
				'ULTRALIGHT 	specifies a 60% font weight.  
				'LIGHT 			specifies a 75% font weight.  
				'SEMILIGHT		specifies a 90% font weight.  
				'NORMAL			specifies a normal font weight.  
				'SEMIBOLD		specifies a 110% font weight.  
				'BOLD			specifies a 150% font weight.  
				'ULTRABOLD		specifies a 175% font weight.  
				'BLACK			specifies a 200% font weight.  
				.CharWeight=com.sun.star.awt.FontWeight.NORMAL

			    'Text positionieren
			    'horijustify=1 <--	links
			    'horijustify=2 <--	mittig
			    'horijustify=3 <--	rechts
			    'horijustify=4 <--	nicht nur umbrochen --> Blocksatz
				.horijustify = 1	' linksbündig
				.IsTextWrapped = False 	'Kein Zeilenumbruch
				
			End with
			
	' Referenz: Spalten
    oCol = oSheet1.getColumns()
		' optimale Spaltenbreite
    	oCol.optimalWidth = true
		
		' Ein Zellobjekt referenzieren, in diesem Fall die Zelle "A1"	
		oCell =  oSheet1.getCellRangeByName("A1")
	  		' Cursor in Zelle "A1" setzen, damit wird gleichzeitig die Gesamtmarkierung aufgehoben.
			oCC.Select(oCell)
End Sub
Habe in den Code Kommentarzeilen eingefügt, so kannst Du Dich orientieren,
welche Aktion in welcher Zeile erfolgt.

@Peter
Peter hat geschrieben:versuch es bei LibreOffice Programmierung.
Aber wo wir gerade schon mal hier sind... ;)
Beim nächsten mal wird Ulrich Deinem Wunsch sicherlich berücksichtigen.

Re: Makro - wo ist der Fehler

Verfasst: Fr 23. Aug 2019, 17:22
von Mondblatt24
Hallo,
Aber wo wir gerade schon mal hier sind... ;)
Beim nächsten mal wird Ulrich Deinem Wunsch sicherlich berücksichtigen.
abwarten.


G Peter