Formatvorlage per Makro erstellen

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

Moderator: Moderatoren

duffman521
**
Beiträge: 49
Registriert: Fr, 22.10.2010 09:31

Formatvorlage per Makro erstellen

Beitrag von duffman521 »

Hallo Forengemeinde,

ich hätte da ein kleines Problem.

Vor kurzem habe ich ein Makro geschrieben, welches eine Tabelle nach bestimmten Angaben formatiert. Unteranderem gibt es in diesem Makro eine bedingte Formatierung. Für diese bedingte Formatierung habe ich eine neue Standartvorlage erstellt. Diese Vorlage funktioniert ohne Probleme bei meinen Anwendungen. Leider funktioniert es bei einem Kollegen, welcher das Makro wollte, nicht. Problem ist laut ihm die Standartvorlage. Er exportiert aus einem Programm (Name habe ich leider nicht parat) eine Liste in Excel oder Calc. Beim Exportieren in Calc gibt es nun Probleme mit der neuen Standartvorlage.

Um nun nicht stundenlang nach dem Fehler zu suchen war nun meine Idee die benötigte Formatvorlage gleich per Makro zu gestallten.
Meine Google suche war leider erfolglos. Also wende ich mich an euch.

Ist es Möglich mit einem Basic Makro eine Formatvorlage zu erstellen? Wenn ja, wie mache ich dies?

Im vorraus schon eimal vielen Dank für eure Hilfe.

Gruß

duffman521
manese
*****
Beiträge: 482
Registriert: Mo, 03.10.2005 17:20
Wohnort: Borgholzhausen
Kontaktdaten:

Re: Formatvorlage per Makro erstellen

Beitrag von manese »

Hallo duffman,
ich habe das für den WRITER schon mal gemacht.
Ich gehe davon aus, dass es für CALC genauso funktioniert.

Code: Alles auswählen

'Die Absatzvorlage VERSTECKT erstellen und einfügen
	Dim oDoc as object
		oDoc = ThisComponent
	Dim vParaStyles
		vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")	

	if not vParaStyles.hasByName("versteckt") then
		Dim vStyle2
			vStyle2 = oDoc.createInstance("com.sun.star.style.ParagraphStyle")
		with vStyle2
			.ParaBackColor = RGB(222, 222, 222)
			.CharColor = RGB(222, 222, 222)
			.ParentStyle = "Standard"
			.CharFontName = "Lucida Sans Unicode"
		end with
		vParaStyles.insertByName("versteckt", vStyle2)
	end if
Alles Gute
matthias
duffman521
**
Beiträge: 49
Registriert: Fr, 22.10.2010 09:31

Re: Formatvorlage per Makro erstellen

Beitrag von duffman521 »

Hallo manese,

erst einmal vielen Dank für die Hilfe. Aber leider funktioniert der Code nicht.

Ich erhalte in der Zeile "vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")" folgende Fehlermeldung:

BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type: com.sun.star.container.NoSuchElementExceptionMessage: .


Um ehrlich zu sein habe ich leider keinen blassen Schimmer was diese Fehlermeldung mir sagen will, geschweige den was ich machen könnte.

Gruß

duffman521
manese
*****
Beiträge: 482
Registriert: Mo, 03.10.2005 17:20
Wohnort: Borgholzhausen
Kontaktdaten:

Re: Formatvorlage per Makro erstellen

Beitrag von manese »

Hallo duffman,
tut mir leid, dass es nicht funktioniert.
Nach allem, was ich davon weiß, ist das tatsächlich das Problem,
dass du eine Frage für Calc hast und ich dir eine Antwort für Writer gegeben habe.
Ich habe einen schnellen Blick in meine schlauen Bücher geworfen,
habe aber zu Formatvorlagen in Calc nichts gefunden,
ich kann dir also vorerst nicht weiterhelfen.

Alles Gute
matthias
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Formatvorlage per Makro erstellen

Beitrag von balu »

Hallo duffman521,

schau mal bei Dannenhoefer rein.
Unter 7.1 Zellen findest Du nicht nur allgemeine Punkte zu Makros in Calc, sondern auch 7.1.20 Wie kann man eine bedingte Formatierung einfügen? Und ferner 7.1.21 Wie kann die bedingten Formatierungen löschen?
Ich denk mir mal das Du dort ganz gut aufgehoben bist. Und wenn Du dann noch immer nicht weiterkommst, meldest Du dich wieder hier :wink:.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Formatvorlage per Makro erstellen

Beitrag von Karolus »

Hallo
Es gibt in Calc keine:

Code: Alles auswählen

vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles") 
versuchs mal mit:

Code: Alles auswählen

cellStyles = oDoc.StyleFamilies.getByName("CellStyles") 
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
duffman521
**
Beiträge: 49
Registriert: Fr, 22.10.2010 09:31

Re: Formatvorlage per Makro erstellen

Beitrag von duffman521 »

Guten Morgen.

Leider hatte ich in letzter Zeit wenig Zeit mich um dieses Problem zu kümmern.
Schon mal vielen Dank für die Hilfen.

@ balu

Die bedingte Formatierung funktioniert einwandfrei es geht im Moment nur noch um die Formatvorlagen.

@ Karolus

Ich habe die Zeilen nun verändert und erhalte ein paar Zeilen später schon wieder eine Fehlermeldung

Code: Alles auswählen

   Dim oDoc as object
      oDoc = ThisComponent
   Dim vParaStyles
      cellStyles = oDoc.StyleFamilies.getByName("CellStyles") 

   if not cellStyles.hasByName("versteckt") then
      Dim vStyle2
         vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyles") 'Ich vermute, dass hier der Fehler liegt.
      with vStyle2
         .ParaBackColor = RGB(222, 222, 222) 'Fehlermeldung erscheint
         .CharColor = RGB(222, 222, 222)
         .ParentStyle = "Standard"
         .CharFontName = "Lucida Sans Unicode"
      end with
      vParaStyles.insertByName("versteckt", vStyle2)
   end if
Es handelt sich um folgende Meldung:

BASIC-Laufzeitfehler
Objektvariable nicht belegt


In den Kommentaren sieht man ja schon wo ich den Fehler vermute, leider kann ich ihn nicht erkennen. Ich habe jetzt schon verschiedene Dinge versucht zu ändern. Die Ergebnisse waren jedoch immer wieder die gleiche Fehlermeldung.
duffman521
**
Beiträge: 49
Registriert: Fr, 22.10.2010 09:31

Re: Formatvorlage per Makro erstellen

Beitrag von duffman521 »

Das Makro läuft nun ohne sichtbaren Probleme.

Die Vorlage wird erstellt aber leider werden die Einstellungen nicht genutzt.

Hier der veränderte Code:

Code: Alles auswählen

sub absatzvorlage
Dim oDoc as object
      oDoc = ThisComponent
   Dim vParaStyles
      cellStyles = oDoc.StyleFamilies.getByName("CellStyles") 

   if not cellStyles.hasByName("Test1") then
      Dim vStyle2
         vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle") 
         with vStyle2
         .CellBackColor  = RGB(255, 0, 0)     'ParaBackColor  wurde noch in CellBackColor geändert  
         .CharColor = RGB(222, 222, 222)
         .ParentStyle = "Standard"
         .CharFontName = "Arial"
      end with
      cellStyles.insertByName("Test1", vStyle2)
   end if
end sub
Ich habe versucht diverse Einstellungen für die "Formateigenschaften" zu nutzen aber es scheint nichts zu funktionieren.

Gruß

duffman521
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formatvorlage per Makro erstellen

Beitrag von DPunch »

Aloha
duffman521 hat geschrieben:Die Vorlage wird erstellt aber leider werden die Einstellungen nicht genutzt.
Die Einstellungen können erst gemacht werden, wenn der Style tatsächlich angelegt worden ist.

Stell den Code mal folgendermaßen um:

Code: Alles auswählen

sub absatzvorlage
Dim oDoc as object
      oDoc = ThisComponent
   Dim vParaStyles
      cellStyles = oDoc.StyleFamilies.getByName("CellStyles") 

   if not cellStyles.hasByName("Test1") then
      Dim vStyle2
         vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle") 
         cellStyles.insertByName("Test1", vStyle2)
         with vStyle2
         .CellBackColor  = RGB(255, 0, 0)     'ParaBackColor  wurde noch in CellBackColor geändert  
         .CharColor = RGB(222, 222, 222)
         .ParentStyle = "Standard"
         .CharFontName = "Arial"
      end with
      
   end if
end sub
duffman521
**
Beiträge: 49
Registriert: Fr, 22.10.2010 09:31

Re: Formatvorlage per Makro erstellen

Beitrag von duffman521 »

Vielen Dank DPunch,

das Makro läuft, die Forlage wird erstellt.

Gruß

duffman521

Edit:

Kleine Frage wie kann ich Zeichenformatierungen einstellen?
Also die z.B. Währung, Euro, zwei Nachkommastellen, Negative Zahlen nicht rot.

Ich raffs irgendwie nicht.
Hömmelmann
****
Beiträge: 119
Registriert: Di, 28.11.2006 19:44
Wohnort: Meppen

Re: Formatvorlage per Makro erstellen

Beitrag von Hömmelmann »

Hallo,

zum Einstellen der Zahlenformate schau mal nach bei:

http://www.dannenhoefer.de/faqstarbasic ... dardformat

Dann hab ich da noch eine Frage an alle:

Eine Zellvorlage erstellen klappt mit dem hier o.a. Code. Probleme bereitet mir, die erstellte Vorlage zu ändern.
Laut xray gibt es eine Methode "replacebyname".
In der Praxis läuft der Code auch ohne Fehlermeldung, jedoch ist die Wirkung nicht die erwünschte. Es werden nicht die geänderten Werte
eingetragen, sondern alles auf Standard zurückgesetzt und die geänderte Vorlage lässt sich auch nicht zuweisen.
Der verwendete Code:
....
Dim oDoc as object
dim dHG as double
Dim vParaStyles
Dim vStyle2

oDoc = ThisComponent
oBlatt=oDoc.sheets(0)
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle")
if not cellStyles.hasByName("Test1") then
cellStyles.insertByName("Test1", vStyle2)
else
cellStyles.replaceByName("Test1", vStyle2)
end if
with vStyle2
.CellBackColor = oBlatt.getcellbyposition(0,0).value
.CharColor = oBlatt.getcellbyposition(0,1).value
.ParentStyle = "Standard"
.CharFontName = "Arial"
end with
.....

viele Grüße

Friedhelm
Antworten