Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Marla2

Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von Marla2 » 24.02.2018 10:24:34

Hallo debianforum :)

Ich habe gerade ein kleines Uniprojekt und brauche dazu ein kleines Makro:

Und zwar hätte ich gerne nur ein ganz kleines Makro dass mir einfach in mein Dokument in Fett "InterviewpartnerXY: " schreibt. (Das lege ich dann auf eine Tastenkombination und erspare mir enorme Tipparbeit).

Ich kenne die Makroaufnahme, diese nutze ich bisher für den gennanten Zweck, aber ich kann mir vorstellen dass ein selber geschriebenes Makro sehr viel schlanker ist und ich würde gerne mit einem kleinen Script mal sehen wie ich sowas realisieren kann.
(Reverse Engineering bringt mir nur einen sehr langen Codeblock den ich (noch) nicht verstehen kann.)
Das Makro Handbuch habe ich gefunden, aber ich habe gerade nicht die Zeit mir ganz tief da rein zu lesen, da die Aufgabe dringend ist und bis Montag fertig sein muss.

Hat jemand laune mir zu helfen?
sub test2
Print "Dies ist Zeile zwei"
end sub
Dieser Text zeigt ja nur ein kleines Fenster, ich möchte ja dass der Text an meine Curserposition geschrieben wird...

Herzliche Grüße!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von eggy » 24.02.2018 11:51:23

Poste doch mal den "sehr langen CodeBlock", dann kann man erklären was da passiert.

Wenn ich nur Text einfüge, ist das hier relativ wenig:

Code: Alles auswählen



sub test
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Hallo"

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())


end sub
Was ist unklar?

Marla2

Re: Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von Marla2 » 24.02.2018 12:25:33

Code: Alles auswählen

sub Interviewer
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Bold"
args1(0).Value = true
dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Text"
args2(0).Value = "Interviewer:"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Bold"
args3(0).Value = false
dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Text"
args4(0).Value = " "
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
end sub
Danke für das Angeobt!

Also:

Meine erste Frage: Würde ich den Makro genau so auch von Hand schreiben?
für mich sieht das - auf den ersten Blick - nach sehr viel aus für die Aufgabe "Schreibe Text XY in aktives Dokument an Cursorposition"

Meine Analyse:
  • Es werden Variablen definiert und viele Dinge gemacht die ich nicht kapiere (erste 10 Zeilen)
  • Dann wird der Text "fett gemacht"
  • "Interviewer:" wird geschrieben
  • Das Attribut "fett" wird entfernt
  • ein Leerzeichen wird eingefügt
eggy hat geschrieben: ↑ zum Beitrag ↑
24.02.2018 11:51:23
Was ist unklar?
Unklar ist mir ob es wirklich so viele Befehle braucht.. ich habe Bedenken dass ich mir sowas einfach merken kann. Ich hatte gehofft dass es wie mit "generiertem html" ist, dass manchmal viel ballast dabei ist, den man wenn man es sauber von Hand skriptet nicht braucht und der sofort verstehbar ist.

Viele Grüße!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von eggy » 24.02.2018 13:13:29

Code: Alles auswählen

sub test  // da fängt das "Programm" an
rem ----------------------------------------------------------------------  // rem ist ein Kommentar, das soll hier nur für Lesbarkeit sorgen
rem define variables   // rem ist wieder ein Kommentar, der sagt was als nächstes passiert: dim macht Variablen bekannt
dim document   as object     // damit man das Dokument später anfassen kann
dim dispatcher as object     // damit man später Zugriff auf den "Dispatcher" hat (damit werden z.B. Klicks auf die Schaltflächen ausgeführt)
rem ---------------------------------------------------------------------- 
rem get access to the document
document   = ThisComponent.CurrentController.Frame   // der oben angelegten Variable einen Wert zuweisen (also das aktuelle Dokument)
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")   // und der anderen Variable auch ein Objekt zuweisen
soweit klar? Dann noch den Schluss

Code: Alles auswählen

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue  // dim, hatten wir oben ja schonmal: neue Variable 
args4(0).Name = "Text"   // der Variablen Werte zuweisen
args4(0).Value = " "
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())  // und schlussendlich den Dispatcher aufrufen, hier die InsertText Funktion mit den grade zugewiesenen Paramtern, die in args4 enthalten sind
end sub  // Programm zu Ende
Also, ja, kann man so machen, geht aber auch anders:

Code: Alles auswählen

sub test
dim cursor 
cursor = ThisComponent.CurrentController.getViewCursor()
cursor.gotoEnd(False)
cursor.Text.insertString(cursor , "Text" , False)
end sub
Hier wird nur der Cursor ans Ende bewegt und an der Stelle der Text eingefügt.

Wenn man "nur schnell" mal was machen will, bin ich in der Regel faul und zeichne mir auf die Dispatcheraufrufe auf, geht schneller als in der API zu suchen, was ich wo mit welchen Parametern machen muss.

Marla2

Re: Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von Marla2 » 24.02.2018 14:16:16

eggy hat geschrieben: ↑ zum Beitrag ↑
24.02.2018 13:13:29
Wenn man "nur schnell" mal was machen will, bin ich in der Regel faul und zeichne mir auf die Dispatcheraufrufe auf, geht schneller als in der API zu suchen, was ich wo mit welchen Parametern machen muss.
Danke danke! Das ist was ich gemeint habe :)
Sowas verstehe ich dann auch.. bzw. kann es mir einfacher zusammenreimen,

aber wie kann ich jetzt dem "Text" Formatierungen zuweisen? Also es soll ja letztendlich Interviewer: dort stehen (fett und mit leerzeichen nach dem doppelpunkt.

Und gibt es sowas wie eine befehlsreferenz in der ich sowas nachschlagen kann? in den Handbüchern finde ich leider nur sehr viel allgemeines (oder ich suche falsch).

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Kann mir jemand mit Anfägner-Makros helfen? (libreoffice writer)

Beitrag von eggy » 24.02.2018 14:54:41

Doku gibts auf https://api.libreoffice.org/
Das ist das was ich mit "suchen" meinte:
https://api.libreoffice.org/docs/idl/re ... ursor.html erklärt z.B. wie das mit dem Cursor gemeint ist ... leicht verständlich ist anders. Da ist in vielen Fällen das vorherige Aufzeichen mit dem Dispatcher die einfachere Wahl.
Es gibt (wahrscheinlich mehr, ich kenn aber nur die beiden, poste bitte den Link falls Du was Gutes finden solltest) zwei ganz brauchbare Dokumente, wo man etwas Einsicht erhält (evtl aber auch nicht ganz aktuell, daher nicht wundern, wenn mal was nicht 1:1 wie in der Doku funktioniert):
https://wiki.documentfoundation.org/Macros/de das da verlinkte pdf und
https://www.wollmux.net/wiki/images/f/f ... chbuch.pdf

Antworten