manueller seitenumbruch

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

Moderator: Moderatoren

martin11
*****
Beiträge: 237
Registriert: Do, 30.03.2017 16:07

manueller seitenumbruch

Beitrag von martin11 »

Wo, wie finde ich den Code für manueller Seitenumbruch?
im Netz habe ich nur den für Handarbeit gefunden.

So fügen Sie einen manuellen Seitenumbruch ein:
Klicken Sie in Ihrem Dokument an die Stelle, an der die neue Seite anfangen soll.
Drücken Sie (Strg)(Eingabetaste).


Wo aber ist der/die Befehl(e) dafür?
Ich habe von so was keine Ahnung.
Ich denke aber, für alles was man von Hand machen kann, muss es letzten Endes auch den Code geben?
Bringt Lo 6.2.2 dafür einen Fortschritt?
Martin
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: manueller seitenumbruch

Beitrag von Stephan »

Wo aber ist der/die Befehl(e) dafür?
z.B. per Makrorekorder aufzeichnen:

Code: Alles auswählen

sub Main
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:InsertPagebreak", "", 0, Array())

end Sub
oder selbst programmieren, z.B.:

Code: Alles auswählen

Sub Seitenumbruch_einfuegen
v_cur = ThisComponent.currentController.viewCursor
v_cur.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
End Sub
Bringt Lo 6.2.2 dafür einen Fortschritt?
ich wüsste nicht welchen Fortschritt es dazu geben kann, Makros laufen seit OOo 1.0.0 und ein Seitenumbruch hat auch schon damals funktioniert.


Gruß
Stephan
martin11
*****
Beiträge: 237
Registriert: Do, 30.03.2017 16:07

Re: manueller seitenumbruch

Beitrag von martin11 »

Hallo Stephan,
Du hast das Sub für den Code als Seitenumbruch bezeichnet.
Ergibt der wirklich einen manuellen Seitenumbruch?
Wenn ja, darf ich das Sub umbenennen?
Martin
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: manueller seitenumbruch

Beitrag von Stephan »

Du hast das Sub für den Code als Seitenumbruch bezeichnet.
ich verstehe nicht was das meint
(es gibt kein Sub "für" den Code, sondern "Sub" ist ein Schlüsselwort innerhalb des Codes)
Ergibt der wirklich einen manuellen Seitenumbruch?
Ja. Möglicherweise dann nicht erkennbar wenn Du den Code in einem völlig leerren Dokument anwendest, denn im Gegensatz zu dem anderen Makro wird nicht automatisch ein zusätzlicher Absatz bzw. Absatzumbruch eingefügt.
Wenn ja, darf ich das Sub umbenennen?
Du kannst das benennen wie Du willst.


Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: manueller seitenumbruch

Beitrag von Toxitom »

Martin, was ist denn für Dich ein manueller Seitenumbruch?

Per Makro-Code kannst Du nur einen Seitenumbruch einfügen - das ist dann das selbe, was Du per UI (also über die Oberfläche) über den Befehl Einfügen - manueller Umbruch -> Seite (oft auch genannt "manueller Seitenumbruch") durchführen kannst.

Der Code von Stephan setzt aber immer voraus, dass Du ein aktives Dokument besitzt und dort den Cursor passend an der gewünschten Stelle plaziert hast. Wenn das aber der Fall ist, brauchst Du eigentlich keinen Makro-Code - dann kannst Du das ja auch direkt über den Menübefehl erledigen.

Ansonsten hilft Dir der Code nur dann etwas, wenn Du dein Dokument per Makro erzeugst und den Textcursor passend per Code platziert hast. Ist das so?

Vielleicht postest Du eher mal den Gesamtcode mit dem Hinweis, wo Du den Seitenumbruch einfügen möchtest.

Dann kann Dir sicher besser geholfen werden als mit den Code-Schnipseln, die Dir im Grunde nicht weiterhelfen, wenn Du den Gesamtzusammenhang nicht kennst.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
martin11
*****
Beiträge: 237
Registriert: Do, 30.03.2017 16:07

Re: manueller seitenumbruch

Beitrag von martin11 »

Ein manueller Seitenumbruch ist:
Geh auf das Zeichen oder das Absatzende an dem der Seitenumbruch eingefügt werden soll.
Ist an dem Zeichen kein Absatzende, füge den ein.
Dort gehe zu Einfügen manueller Seitenumbruch.
Dann entsteht auf der nächste Seite oben ein leerer Absatz.
Um den geht es eigentlich.
Denn dort kann ich mit einem anderen Makro eine komplizierte Kopfzeile einfügen.
Die will ich unbedingt haben.

Code: Alles auswählen

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

REM Das Programm führt einen Cursorsprung durch.
REM Der Cursor springt von der aktuellen Seite,
REM direkt in die erste Zeile der nächsten Seite
Sub SpringeAufNaechsteSeite
   oDocC=thisComponent
   oVC=oDocC.GetCurrentController. ViewCursor

	With oVC
		.jumpToNextPage(false)
		.jumpToStartOfPage(false)
		.screenDown(True)
	End With
oVC.jumpToStartOfPage(false)

Sub insert_PageBreak_at_Position
    oViewCursor = thisComponent.CurrentController.ViewCursor
    oText = thisComponent.Text
    oTextCursor = oText.createTextCursor
    oTextCursor.gotoRange(oViewCursor, false)
    oTextCursor.BreakType = com.sun.star.style.BreakType.PAGE_AFTER
    oTextCursor.gotoEndOfParagraph(false)
    oText.insertControlCharacter(oTextCursor, 0,false)
End Sub
Martin
Übrigens bei alle unterstützen Dateiformate gibt es nicht bas.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: manueller seitenumbruch

Beitrag von Toxitom »

Hey Martin,

das alles ist sehr verwirrend:
Ein manueller Seitenumbruch ist:
Geh auf das Zeichen oder das Absatzende an dem der Seitenumbruch eingefügt werden soll.
Ist an dem Zeichen kein Absatzende, füge den ein.
Dort gehe zu Einfügen manueller Seitenumbruch.
Dann entsteht auf der nächste Seite oben ein leerer Absatz.
Um den geht es eigentlich.
Du willst auf das letzte Zeichen einer Seite gehen und dort, wenn dortk kein Absatzendezeichen ist, eins einfügen? Dadurch zerstörst Du aber den logischen Absatz - als geschlossenen Satz / Gedanke.
Durch das Einfügen eines Absatzendes (ist in Deinem Code übrigens nirgends vorhanden) könntst Du natürlich auch gleich einen 2. leeren Absatz einfügen - das wäre dann automatisch der erste leere Absatz auf der Folgeseite - ganz ohne manuellen Seitenumbruch.

Kopfzeilen (ob kompliziert oder nicht) sind im übrigen immer Teile der Seitenvorlage und nicht Teil des Fliesstextes - und sollten das auch bleiben. Also auch hier ist das Vorgehen zunächst nicht sinnvoll. Hier wäre es zwar sinnvoll, einen Seitenumbruch einzufügen mit entsprechender Kopfzeile - aber das ist ein anderes Thema.

Dein geposteter Code kann im übrigen nicht funktionieren: Sub innerhalb einer Sub, leerzeichen zwischen "." und "ViewCursor", Viewcursor erneut erzeugt, obwohl schon definiert.... Das ganze erscheint mir zusammenkopierte Codezeilen ohne zu verstehen, was die einzelnen bedeuten und wie ein Textprogramm aufgebaut ist.

Fange langsam an und arbeite Dich Stück für Stück vor... so versteht man die Systematik und evt. Code und kommt zu einem guten Ergebnis:)

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: manueller seitenumbruch

Beitrag von Stephan »

Ein manueller Seitenumbruch ist:
Geh auf das Zeichen oder das Absatzende an dem der Seitenumbruch eingefügt werden soll.
Ist an dem Zeichen kein Absatzende, füge den ein.
Dort gehe zu Einfügen manueller Seitenumbruch.
Dann entsteht auf der nächste Seite oben ein leerer Absatz.
Um den geht es eigentlich.
z.B. dieses Makro sollte genau das Vorstehende tun (vor/beim Start des Makros muss der Cursor im Fließtext stehen):

Code: Alles auswählen

Sub manueller_Seitenumbruch()
	cur = ThisComponent.GetCurrentController.ViewCursor
	cur.GoRight(1, True)
	x = ASC(cur.String)
	cur.collapseToStart()
	ThisComponent.Text.insertControlCharacter(cur, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)

	If NOT(x = 13) Then
		ThisComponent.Text.insertControlCharacter(cur, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
		cur.GoLeft(1, False)
	End If
	
	cur.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
End Sub
Du müsstest nur auch versuchen Code zu verstehen um etwas für zukünftige Makros zu lernen, sonst bist Du ewig nur am Rumraten.


Gruß
Stephan
martin11
*****
Beiträge: 237
Registriert: Do, 30.03.2017 16:07

Re: manueller seitenumbruch

Beitrag von martin11 »

Danke Stephan,
deinen Code werde ich einbinden.

Hallo Toxitom,
  • Bezüglich des letzten Absatzes habe ich entschieden, dass es besser ist, dass die Seiten einigermaßen voll sind.
    Auf der nächsten Seite schreibe ich dann klein weiter und rücke dessen erste Zeile nicht ein.
  • Ganz ohne manuellen Seitenumbruch scheint es, aber nicht möglich zu sein was ich möchte.
    Ich habe entsprechende Seitenvorlagen.
  • Ich will gleichzeitig aus einer Calc Tabelle die Texte einfügen.
  • Der Code läuft aber.
Mein Problem ist, dass mein Freund keine Zeit mehr hat.
Deshalb bin ich auf andere Hilfen angewiesen.
Bald bin ich ja fertig.
Ich danke Euch allen.
Martin
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: manueller seitenumbruch

Beitrag von Toxitom »

Hallo Martin,

na ja, wenn Du meinst;)

Der Code vom Stephan funktioniert - ja sicher. Er funktioniert immer dann sicher, wenn folgende Voraussetzungen erfüllt sind:
  • Du befindest Dich im eigentlichen Text - nicht in einer Tabelle, nicht in einem Rahmen, nicht in einem Textfeld....
  • Der Cursor ist vorhanden und sichtbar (also keine Druckansicht oder andere Varianten
  • es ist nichts markiert - schon gar keine Mehrfachselektion (wobei: ein markiertes Wort würde dem Code nicht schaden - der Seitenumbruch wird dann davor eingefügt.
  • es darf nachträglich zu keiner Änderung des Textflusses kommen - da der automatische Seitenumbruch entfällt und es dann zu wirklich ärgerlichen Phänomenen kommen wird...
  • ....
Das wären mir viel zu viele notwendigen Parameter, die erfüllt sein müssen, damit der Code überhaupt funktioniert - und in einem guten Makro muss das alles gepürüft und sichergestellt werden. Hier wäre sicher der manuelle Umbruch über die UI die weitaus bessere Alternative. Musst doch sowieso die Bedingungen erfüllen - da könnteste den Umbruch auch problemlos einfügen.

Aber egal... wenn es Dich weiter gebracht hat - perfekt:)

Viel Spass noch bei Deinem Projekt.
VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: manueller seitenumbruch

Beitrag von Stephan »

Mein Problem ist, dass mein Freund keine Zeit mehr hat.
Deshalb bin ich auf andere Hilfen angewiesen.
Dein Problem scheint mir leider auch das Du das Ganze falsch angehst.

Es gab, hier im Forum, vor einigen Wochen einen Stand der Lösung der beschrieben ist mit:
-das Makro Deines Freundes leistete das Gewünschte, außer auf den Verzeichnisseiten
-mein Makro fürs Verzeichnis funktionierte nur nicht bezüglich der Option "Alphabetische Trennzeichen", ansonsten schon

Du hättest also, der Not gehorchend, bei ein paar Verzeichnisseiten die 'Kopfzeilen' per Hand anpassen können und im Verzeichnis händisch die Buchstaben A-Z reinschreiben. Wie die Verzeichnisseiten zu bearbeiten wären, dazu gab es auch Lösungsvorschläge.
Stattdessen hast Du (augenscheinlich) einen erheblichen Aktionismus entfaltet, bei dem ich teils garnicht verstehe welches konkrete Problem mit welchem der diversen isoliert angefragten Makroschnipsel gelöst werden soll.

Das alles ist Deine Entscheidung, die meine Bereitschaft zum Helfen bei konkret gestellten Fragen nicht mindert, allein kommt mir meine Hilfe hier stellenweise wie Stückwerk vor.


Gruß
Stephan
Antworten