Seite formatieren

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

Moderator: Moderatoren

hoefri55
**
Beiträge: 37
Registriert: Do, 16.09.2004 10:16
Wohnort: Meppen

Seite formatieren

Beitrag von hoefri55 »

Hallo,

ich habe mein erstes Excel-VBA-Macro schon fast komplett auf OO umgearbeitet. Mir fehlt jetzt nur noch die Formatierung der Seiten und das Einfügen von Seitenumbrüchen. Leider klappt das aber über den Macro-Rekorder nicht.
Wer kann mir dabei helfen?

Danke

F. Hömmeke
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Die Seitenumbrüche habe ich mir per Makrorekorder programmiert und den Code dann angepaßt:

Code: Alles auswählen

sub Zeilenumbruch
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
Dok = ThisComponent
Controller = Dok.CurrentController
document   = Controller.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------

Blatt = Dok.sheets(0)
Zeile = Blatt.rows(12)
Controller.select(Zeile)
dispatcher.executeDispatch(document, ".uno:InsertRowBreak", "", 0, Array())

Zelle = Blatt.getCellbyPosition(0,12)
Controller.select(Zelle)
Controller.ActiveSheet = Dok.sheets(1)
Controller.ActiveSheet = Blatt


end sub
Der Zeilenumbruch erfolgt zwischen Zeile 12 und 13.

Dabei dienen die letzten beiden Zeilen mit dem ActiveSheet nur dazu, um eine schönere Darstellung zu erreichen. Denn bei Verwendung von Controller.select wird eine Zelle schwarz dargestellt. Durch schnelles Umschalten auf ein anderes Tabellenblatt erreicht man die normale Darstellung. Das andere Tabellenblatt muss natürlich vorhanden sein.

Die Formatierung einer Seite geschieht durch Ändern der Seitenvorlage. Du solltest allerdings noch ein paar Angaben machen, was du genau ändern willst, da die Änderungsmöglichkeiten sehr umfangreich sind.

Gruß
Charly
hoefri55
**
Beiträge: 37
Registriert: Do, 16.09.2004 10:16
Wohnort: Meppen

Seite formatieren

Beitrag von hoefri55 »

Hallo,

das mit den Seitenumbrüchen klappt schon prima.
Am Seitenformat möchte ich z.B. die Seitenausrichtung ändern, Kopf- und Fußzeilen eintragen, Seitenränder anpassen.


Gruß, Friedhelm H.
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Ich habe mal versucht deine Frage in einen Code umzusetzen. Ich hatte allerdings keine Zeit den Syntax zu überprüfen. Falls was nicht funktioniert, frage nochmal nach.

Code: Alles auswählen


Sub FormatiereSeite()

Dok = ThisComponent
StyleFamilies = Dok.StyleFamilies
PageStyles = StyleFamilies.getbyName("PageStyles")

'Hier Name der Seitenvorlage eingeben oder Standardvorlage = Default

DefPage = PageStyles.getByName("Default")

'Hochformat
DefPage.IsLandscape = False

'Querformat
DefPage.IsLandscape =True

'Seitenraender in 100stel mm
DefPage.LeftMargin = 1000
DefPage.RightMargin=1000
DefPage.TopMargin =1000
DefPage.BottomMargin=1000

'Kopfzeile 
DefPage.HeaderIsOn = True
HContent = DefPage.RightPageHeaderContent
Htext = HContent.LeftText
Htext.String = "Ein Text"
DefPage.RightPageHeaderContent = Hcontent

'Fusszeile
DefPage.FooterIsOn = True
FContent = DefPage.RightPageFooterContent
Ftext = FContent.LeftText
Ftext.String = "Ein Text"
DefPage.RightPageFooterContent = FContent

End Sub



gruß
Charly
hoefri55
**
Beiträge: 37
Registriert: Do, 16.09.2004 10:16
Wohnort: Meppen

Beitrag von hoefri55 »

Hallo,

erstmal schönen Dank für die schnelle und kompetente Hilfe.
Probleme habe ich noch mit der Fußzeile. Einrichten klappt, aber wie bekomme ich die Seitennummerierung da hinein?
Die Umschaltung des Seitenformates von Quer- auf Hochformat funktioniert leider nicht so, OO meldet aber keinen Fehler.


Gruß, Friedhelm
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo Friedhelm!

Bei mir funktioniert die Umschaltung. Ich weiß nicht woran es liegen kann.
Es gibt allerdings noch einen anderen Weg für die Umschaltung über die Printereigenschaft. Dokument.printer liefert ein Array. Im zweiten Feld steht die Information für Hoch und Querdruck

Code: Alles auswählen

Dok = ThisComponent
PaperProperties = Dok.printer 
PaperProperties(1).value = 1       '0 = Hochdruck ; 1 = Querdruck
Dok.printer = PaperProperties()
Das mit der Seitennummerierung, weiß ich im Moment auch nicht. Bei mir war die Seitennummerierung in der Standardvorlage immer vorbelegt. Einen Text habe ich dann nur in die anderen Teile (LeftText, CenterText oder RightText) eingefügt.

Das einzige was ich per Makro in Bezug auf Seitennummerierung bis jetzt geändert habe, war dass die erste Seite des Ausdruckes nicht mit 1 beginnen soll, sondern mit einer späteren Nummer.


Gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo Friedhelm!

Hier noch einen Nachtrag. Die Änderungen der Seitenvorlage wirken sich auf das ganze Dokument aus.

Wenn du im gleichen Dokument einmal Hoch und einmal quer drucken willst, musst du entweder die entsprechenden Seiten getrennt drucken und die Vorlage erst vor dem drucken ändern und dann wieder zurückändern oder du mußt mehrere Seitenvorlagen verwenden bei der einmal Hochdruck und einmal Querdruck eingestellt ist.


gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo Friedhelm!

Jetzt melde ich mich schon zum Drittenmal hintereinander. Aber ich bin jetzt hinter den Fehler mit der Umschaltung von Hoch- auf Querformat gestoßen. So wie ich dir den Code mitgeteilt habe, schaltet er zwar auf Querformat um, wechselt aber nicht gleichzeitig die Höhe und Breite der Seite. Die muss man separat einstellen.

Die Codeergänzung lautet:

Code: Alles auswählen

DefPage.IsLandscape = true
DefPage.Width = 29700
DefPage.Height = 21000
Das mit den verschiedenen Seitenvorlagen funktioniert nur im Writer ohne Einschränkung. Im Calc kann man scheinbar nur auf verschiedenen Tabellenblättern mit unterschiedlicher Seitenausrichtung arbeiten.

Gruß
Charly
Antworten