Writer -> Makro -> Sprung zur ersten Seite

Hallo *,

Ziel: Makro-Code für Sprung zur ersten Seite und Anzeige der ersten Seite

Bisheriger Makro-Code: ThisComponent.CurrentController.getViewCursor().jumpToFirstPage()

Problem: Cursor befindet sich zwar auf der ersten Seite. Erste Seite wird aber nicht angezeigt.

Frage: wie lautet der Makro-Code, damit die erste Seite auch angezeigt wird?

LO: LibreOffice 3.4.5 OOO340m1 (Build:502)
OS: Windows 7 Prof 64 Bit

Gruß

Jochen

Jochen wrote:

Ziel: Makro-Code für Sprung zur ersten Seite und Anzeige der ersten
Seite

Mit LO 3.4.4 aufgezeichneter, um Kommentare und unnütze Deklarationen
gekürzter, Code

---> schnipp <-------------------------------------------------------
sub SprungSeite1

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0,
Array())

end sub

---> schnipp <-------------------------------------------------------

Beachte beim Kopieren die Zeilenumbrüche (bei meinem Newsreader hier auf
Zeile 71 eingestellt: die letzte "dispatcher"-Zeile dadurch umgebrochen.

Hilft Dir das?

Seltsam. Bei mir, openSUSE 12.1 mit LO 3.4.4 (openSUSE-Brand), funktioniert es, sowohl aus normalem Text wie auch aus einer Tabelle heraus.

Woher weißt du, dass der Cursor auf der ersten Seite ist? Was passiert, wenn du die Pfeiltaste nach rechts oder links drückst?

Gruß
Volker

Hallo Winfried,

Jochen wrote:

Ziel: Makro-Code für Sprung zur ersten Seite und Anzeige der ersten
Seite

Mit LO 3.4.4 aufgezeichneter, um Kommentare und unnütze Deklarationen
gekürzter Code
sub SprungSeite1
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0,
Array())

Danke für Deine Antwort.
1) Ich verwende LO 3.4.5 - Du LO 3.4.4
2) Ich wollte eigentlich keinen Dispatcher-Befehl verwenden.
3) Auch der Dispatcher-Befehl führt nicht dazu, dass die erste Seite angezeigt/aufgerufen wird.

Gruß

Jochen

Hallo Volker,

Ziel: Makro-Code für Sprung zur ersten Seite und Anzeige der ersten Seite

Woher weißt du, dass der Cursor auf der ersten Seite ist?

Vertikale Scroll-Leiste -> dort befindliches kleines Quadrat mit der Maus fassen (linke Maustaste) -> Quadrat ganz oben ziehen -> Cursor blinkt auf der ersten Seite ganz links (= also erstes Zeichen im Dokument).
Zur Erinnerung: nach Ausführung des Makros bleibt die Seite stehen, in der sich der Cursor vor Ausführung des Makros befand.

Was passiert, wenn du die Pfeiltaste nach rechts oder links drückst?

Drücken der Pfeiltaste nach rechts: erste Seite wird angezeigt und Cursor befindet sich im zweiten Zeichen des Dokumentes (von Dokumentbeginn aus gesehen).
Dies bestätigt meine Vermutung, dass irgendetwas aktualisiert werden muss (?Bildschirmansicht). Den dazu gehörigen Befehl habe ich jedoch nicht als Interface u./o. Methode gefunden - weder bei Pitonyak noch im Netz.

Gruß

Jochen

Hallo Jochen,

Dies bestätigt meine Vermutung, dass irgendetwas aktualisiert werden
muss (?Bildschirmansicht). Den dazu gehörigen Befehl habe ich jedoch
nicht als Interface u./o. Methode gefunden - weder bei Pitonyak noch im
Netz.

Ich denke, es ist ein Bug in der 3.4.5.

Aber versuch es doch einmal mit folgendem Workaround:
   Dim oVCursor
   oVCursor = ThisComponent.CurrentController.ViewCursor
   oVCursor.jumpToFirstPage
   oVCursor.goRight(1, false)
   oVCursor.goLeft(1, false)

Viel Erfolg.
Volker

oder:
   Dim oVCursor
   Dim oCursor
   oCursor = ThisComponent.Text.createTextCursor
   oVCursor = ThisComponent.CurrentController.ViewCursor
   oCursor.gotoStart(false)
   oVCursor.gotoRange(oCursor, False)

Volker

Hallo Volker,

Aber versuch es doch einmal mit folgendem Workaround

Danke für Deinen Vorschlag. Aber dieser hat mir auch nicht weiter geholfen. Allerdings bin ich in der Ursachenforschung etwas weiter gekommen.

ThisComponent.CurrentController.getViewCursor().jumpToFirstPage() funktioniert nur bei einem bereits geöffneten Dokument (logisch).

Ich habe das Makro (Code s. weiter unten) jedoch unter Extras -> Anpassen -> Ereignisse in "Laden des Dokumentes beendet" eingebunden. Dies scheint das Problem zu sein. "Wait 100" löst das Problem auch nicht. Hast Du diesbezüglich noch eine Idee?

Makrocode:

sub DokumentLadenBeendet
  sAbfrageMsgBoxPositionCursor = MsgBox ("Soll Cursor an der zuletzt bearbeiteten Position stehen (Nein: Cursor am Textanfang und Begriffsuche)?",4)
  Select Case sAbfrageMsgBoxPositionCursor
   Case = 6 'Ja
   Case = 7 'Nein
  ThisComponent.CurrentController.getViewCursor().jumpToFirstPage()
  oDescriptor = ThisComponent.createSearchDescriptor()
   With oDescriptor
    .SearchString = sSuchbegriff
    .SearchWords = true
    .SearchCaseSensitive = False
   End With
  oFound = ThisComponent.findFirst(oDescriptor)
   Do While Not IsNull(oFound)
    Print oFound.getString()
    oFound = ThisComponent.findNext(oFound.End, oDescriptor)
   Loop
  End Select
end sub

Gruß

Jochen

Hallo Jochen,

Ich habe das Makro (Code s. weiter unten) jedoch unter Extras ->
Anpassen -> Ereignisse in "Laden des Dokumentes beendet" eingebunden.
Dies scheint das Problem zu sein. "Wait 100" löst das Problem auch
nicht. Hast Du diesbezüglich noch eine Idee?

Ja. Binde das Makro an "Ansicht wurde erzeugt".

Gruß
Volker

Hallo Lenhardt,

Ja. Binde das Makro an "Ansicht wurde erzeugt".

Und aus "Laden des Dokumentes beendet" entfernen?

Hinweis:
Ich klicke auf "Entfernen" -> unter "zugewiesene Aktion" ist zunächst das zugewiesene Makro nicht mehr zu sehen.
Wenn ich das Dokument nun abspeichere und "Extras -> Anpassen -> Ereignisse" aufrufe, ist das gerade Makro wieder drinnen (LO 3.4.5; Windows 7 Prof. 64).
Auch hier habe ich ein Problem.

Gruß

Jochen

Hallo Volker,

Hallo Lenhardt,

Sorry: beim Kopieren habe ich aus Versehen Deinen Nachnamen erwischt ("falsche Variable")

Und aus "Laden des Dokumentes beendet" entfernen?
Hinweis:
Ich klicke auf "Entfernen" -> unter "zugewiesene Aktion" ist zunächst
das zugewiesene Makro nicht mehr zu sehen.
Wenn ich das Dokument nun abspeichere und "Extras -> Anpassen ->
Ereignisse" aufrufe, ist das gerade Makro wieder drinnen (LO 3.4.5;
Windows 7 Prof. 64).
Auch hier habe ich ein Problem.

Ich habe das Problem jetzt so gelöst:
Unter "Laden des Dokumentes beendet" habe ich jetzt ein Dummy-Makro eingefügt (nur "sub" und "end sub").

In "Ansicht wurde erzeugt" habe ich das eigentliche Makro eingefügt. So funktioniert Alles. Wahrscheinlich ist dies letztendlich aber von den Programmieren so nicht vorgesehen.

Gruß

Jochen

Hallo Jochen,

Und aus "Laden des Dokumentes beendet" entfernen?
Hinweis:
Ich klicke auf "Entfernen" -> unter "zugewiesene Aktion" ist zunächst
das zugewiesene Makro nicht mehr zu sehen.
Wenn ich das Dokument nun abspeichere und "Extras -> Anpassen ->
Ereignisse" aufrufe, ist das gerade Makro wieder drinnen (LO 3.4.5;
Windows 7 Prof. 64).
Auch hier habe ich ein Problem.

Ich habe das Problem jetzt so gelöst:
Unter "Laden des Dokumentes beendet" habe ich jetzt ein Dummy-Makro
eingefügt (nur "sub" und "end sub").

In "Ansicht wurde erzeugt" habe ich das eigentliche Makro eingefügt. So
funktioniert Alles. Wahrscheinlich ist dies letztendlich aber von den
Programmieren so nicht vorgesehen.

Ich sehe, dass das Problem auch bei mir existiert, aber nicht im originalen OOo 3.2.1. Doch dort funktioniert das Makro nicht richtig, wenn es an "Ansicht wurde erzeugt" gebunden ist. Dort muss es "Dokument öffnen" sein.

Und tatsächlich funktioniert es auch in LO 3.4.5 mit der Verknüpfung "Dokument öffnen". Das scheint wohl die Stelle zu sein, an der alles andere erledigt ist.

Schreibst du einen Bugreport für die hängenbleibenden Ereignisanpassungen?

Gruß
Volker

Hallo Volker,

Schreibst du einen Bugreport für die hängenbleibenden Ereignisanpassungen?

Mache ich. Aber ich habe eine Bitte an Dich: ich bin mir (noch) nicht ganz im Klaren, was wo bei welcher LO-Version nicht funktioniert (mein Kenntnisstand: LO 3.4.5; OS: Windows).
Kannst Du bitte mal einen Bugreport in Deutsch erstellen, wie Du in verfassen würdest. Ich gebe dann meine Meinung dazu ab bzw. stelle den (englischen) Bugreport in Bugzilla ein.

Gruß

Jochen

Hallo Jochen,

Schreibst du einen Bugreport für die hängenbleibenden
Ereignisanpassungen?

Mache ich. Aber ich habe eine Bitte an Dich: ich bin mir (noch) nicht
ganz im Klaren, was wo bei welcher LO-Version nicht funktioniert (mein
Kenntnisstand: LO 3.4.5; OS: Windows).
Kannst Du bitte mal einen Bugreport in Deutsch erstellen, wie Du in
verfassen würdest. Ich gebe dann meine Meinung dazu ab bzw. stelle den
(englischen) Bugreport in Bugzilla ein.

Okay. Ich prüfe einmal meine existierenden LO-Versionen und mache dann einen Bugreport. Den werde ich hier posten, damit du deinen Kommentar daran hängen kannst. Das kann ich aber erst morgen tun.

Schönen Sonntag
Volker

Hallo Volker,

Okay. Ich prüfe einmal meine existierenden LO-Versionen und mache dann
einen Bugreport. Den werde ich hier posten, damit du deinen Kommentar
daran hängen kannst. Das kann ich aber erst morgen tun.

Super. Der Bugreport muss passen. Nach dem 4-Augen-Prinzip wird er passen. Außerdem lesen auch andere mit, die uns auf Ungenauigkeiten hinweisen können.

Gruß

Jochen

Ich habe nun einen Bugreport abgesetzt:
https://bugs.freedesktop.org/show_bug.cgi?id=45691

Schöne Grüße
Volker

Hallo Zusammen,
Vor längerer Zeit habe ich das Thema schon einmal angesprochen. Ich wollte mich nun
mit einem Makro aus der Klemme ziehen. Für einen großen Verein habe ich eine Liste mit Besuchern
zu Geburtstagen. Die Besucherliste besteht aus 18 Namen. Ich habe nun ein Makro geschrieben, das Liste
so ausdruckt, daß in der Liste für den Namen1 dieser Namen in der Liste rot und unterstrichen ausgedruckt
wird. Im Kopf der Zeile wird der Name durch das Makro eingetragen und die Namen mit bedingter Formatierung
eingefärbt.
Sub Main
     oDoc = ThisComponent
     oBlatt = oDoc.getCurrentController().getActiveSheet()
     sName = oBlatt.Name
     Dim mFileProperties()
     For ii = 1 To 18
         Zelleq = oBlatt.getCellByPosition(16,ii)
         wert = Zelleq.String
         Zellez = oBlatt.getCellByPosition(1,0)
         Zellez.String = wert
         oDoc.print(mFileProperties())
     Next ii
End Sub

Das funktioniert im Prinzip auch richtig, nur daß das Programm nach dem Printaufruf nicht wartet, sondern witer
läuft. Das Ergebnis: Blatt 1 mit Namen1, richtig. Dann Blatt 7 mit Namen7 richtig, die restlichen Blätter immer mit Namen18, zwar richtig, aber in 11-facher Ausfertigung.
Einfache Frage: Kann man das Warten auf Druckende für das jeweilige Blatt erzwingen?
MfG
Günter

Der Thread "Serienbrief Calc" ist neu aufgelegt. Bitte dort antworten.

Volker

Hallo Volker,

Ich habe nun einen Bugreport abgesetzt:
https://bugs.freedesktop.org/show_bug.cgi?id=45691

Danke. Jetzt ist mir klar, was Du als Bug posten wolltest. Dieser Bug ist mir ja zufällig aufgefallen, als ich mein Makro-Problem lösen wollte.
Ich werde den Bug für die 3.5-Version testen und im Bug-Report nachtragen, falls dieser dort auch auftritt.

Ich habe noch einen anderen Bug im Rahmen meiner Lösungsversuche gefunden bzw. ich habe diesen auf der de-discuss-ML beschrieben [1]. Liest Du die de-discuss-ML mit bzw. kannst Du dies mal gegenchecken?

[1] http://listarchives.libreoffice.org/de/discuss/msg10967.html

Gruß

Jochen

Hallo Volker,

Ich habe nun einen Bugreport abgesetzt:
https://bugs.freedesktop.org/show_bug.cgi?id=45691

Ich werde den Bug für die 3.5-Version testen und im Bug-Report
nachtragen, falls dieser dort auch auftritt.

Unter LO 3.5.0RC3 tritt der Fehler nicht auf. Ich werde dies im Bug-Report vermerken.

Gruß

Jochen