Makros erzeugen Makros

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

Moderator: Moderatoren

zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Makros erzeugen Makros

Beitrag von zoro17 »

Hallo zusammen,

bin neu hier und habe die FAQs und das Web abgesucht, aber zur meinen
3 Fragen noch keinen entsprechenden Eintrag gefunden.

Ich komme aus dem VBA-Lager und möchte dazu noch eine Alternative
mit openOffice aufbauen.

Unter VBA habe ich folgendes Szenario:
Eine Excel-Datei wird aufgerufen, die automatisiert eine HTML-Seite
im Internet abruft. Diese HTML-Seite enthält ausschliesslich VBA-Code.
Der Inhalt dieser Seite wird in die IDE geschrieben, d.h. Module und
Formulare werden durch Makros erzeugt und mit Code gefüllt. Eigentlich
werden Makros durch Makros erzeugt.

Kann man in openOffice die IDE durch Makros beeinflussen?
Kann man Code per Makro importieren?
Kann ein Makro ein Dialog aufbauen?

Ich bräuchte keine Anleitung, um dies umzusetzen, jedoch würden
mir ein paar Schlüsselbegriffe helfen. Oder vielleicht lässt
sich die IDE per Makros garnicht steuern, das wäre auch schon
eine Antwort.

Ich hoffe auf ein Feedback.

Gruss
zoro17
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey zorro17,

bei einer offenen API, so wie sie OOo besitzt, kannst du alles von außen steuern, also auch die IDE. Ob das allerdings sinnvoll ist, lasse ich mal dahingestellt.
Und natürlich kannst du Makros auch mit Makros erzeugen - dazu brauchst du die IDE nicht zu manipulieren. Du kannst die Bibliotheken oder Module direkt schreiben - sind ja schliesslich XML Files.

Im übrigen könntest du auch die kompletten Textfiles aus dem Internet laden und direkt installieren - auch das wäre möglich.
Also - der Vielfalt ist genüge getan.

Einst musst du dir aber bewusst sein: Was immer du tust mit der Erzeugung von Modulen und Bibliotheken - damit sie funktionieren, muss OOo komplett neu gestartet werden. Denn beim ersten Start werden die Informationen der Konfiguratinsdateien in den Hauptspeicher geladen - und verbleiben dort bis zum schliessen. Änderungen an diesen Dateien werden also erst aktiv, wenn OOo neu gestartet wird!

Im Übrigen solltest du dir auch mal das Konzept des "Packet-Managers" ansehen, vielleicht hilft dir das ja auch schon weiter?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makros erzeugen Makros

Beitrag von komma4 »

zoro17 hat geschrieben:Kann man in openOffice die IDE durch Makros beeinflussen?
Kann man Code per Makro importieren?
Kann ein Makro ein Dialog aufbauen?
[J]Nein.
Ja.
Ja.
zoro17 hat geschrieben:Ich hoffe auf ein Feedback.
Nichts für Ungut: aber "das Web" hast Du nicht abgesucht...

Du beschreibst ein Szenario, welches umsetzbar ist (Datei html aus Internet laden, daraus den Makrotext gewinnen und als Modul sichern), allerdings lässt Du offen, was dann passieren soll (direktes Ausführen der Makros?; Sicherheitseinstellungen?).

Konkret:
Du willst wohl nicht die IDE beeinflussen, deshalb das Jein. Auch das geht (begrenzt).

Das Öffnen einer Datei per Basic (auch aus dem Internet, auch html), Beispiel:

Code: Alles auswählen

Sub loadFromWeb
url = ConvertToURL( "www.winnirohr.de/ooo/MakroAusWeb.txt" ) 
oWebDoc = StarDesktop.loadComponentFromURL(url,"_blank", 0, Array() )
End Sub
Damit kannst Du eine html Datei laden und Deine Infos extrahieren; im Beispiel wird eine Textdatei laden.

Beispiele für Textmanipulationen findest Du hier im Forum.

Zum Erstellen von Modulen:
siehe Dir an, wie XRay seine Einstellungen speichert


Für zur Laufzeit erstellte Dialoge empfehle ich als Startpunkt: http://www.oooforum.org/forum/viewtopic.phtml?t=10265

Hilft das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Makros erzeugen Makros

Beitrag von zoro17 »

Vielen Dank für die Infos! Das hilft mir weiter.

Nochmal zur "Web-Suche": Es es ist nicht ganz einfach, nach etwas
zu suchen, wenn man die Begrifflichkeiten des Objektmodells nicht kennt
oder die Schlüsselbegriffe, die hierfür in Frage kommen.
Aber anscheinend gibt es nicht so viele, die mit OOo dynamisch Makros
laden und dann ausführen. Oder liege ich da falsch?

Zum Hintergrund: Ich möchte die Makros in einer Web-Datenbank
im Internet verwalten. Diese sollen dann in Abhängigkeit des Users,
der sich in openOffice einloggt (OOo-Applikation) angeladen
und ausgeführt werden.
Die OOo-Applikation hätte selbst nichts zu speichern, d.h. nach Beenden
der OOo-Applikation ist alles wieder weg.
Ist OOo hierfür komplett neu zu starten, um ein angeladenes Makro
auszuführen?

Noch eine letzte Frage: Hat jemand Erfahrung, wie performant das
Laden von Makros in Modulen ist oder wie schnell ein Dialog per
Makro erzeugt werden kann?

Danke
Gruss zoro17
zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Makros erzeugen Makros

Beitrag von zoro17 »

Hallo zusammen,

habe mir Eure Tipps angeschaut (xRay + Code) und noch etwas recheriert.
Bei der xRay-Seite habe ich das Tool "AddOnInstaller" gesehen, was
wohl in die Richtung, die ich anstrebe, gehen könnte.

Das Laden einer HTML-Seite war nicht das Problem, auch die String-
bearbeitung sollte keine große Hürde darstellen.
Nur der "Transport" des HTML-Textes (=Makrocode), der z.B. dann in einem Calc-Sheet steht, in die IDE per Makro ist mir nicht klar.

Sollte das dynamische Erzeugen einer Library und Module funktionieren,
irritiert mich die oben gemachte Aussage, das man das erst speichern
müsste, um die online erzeugten Makros ausführen zu können. Oder
habe ich das falsch verstanden? Warum funktioniert dann ein Makro,
das mit Recorder aufgezeichnet wurde? Es wird doch nicht gleich
gespeichert oder?

Anmerkung:
Der Makrocode sollte schon per HTML geladen werden können, damit
Firewallprobleme minimiert werden können.

Vielleicht hat jemand noch einen Tipp.
Danke.
zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Makros erzeugen Makros

Beitrag von zoro17 »

Hallo,

habe Lösung jetzt gefunden:

BasicLibs = Globalscope.BasicLibraries
Lib = BasicLibs.Getbyname("NewLib")

moduleText = "REM Test" + CHR(13) + "Sub TestMsg" + CHR(13) + "msgbox ""Hallo Welt"" " + CHR(13) + "End Sub"

BasicLibs = Globalscope.BasicLibraries
Lib = BasicLibs.Getbyname("NewLib")
moduleText = "REM Test" + CHR(13) + "Sub TestMsg" + CHR(13) + "msgbox ""Hallo Welt"" " + CHR(13) + "End Sub"
Lib.insertByName("Modul1",moduletext)

Hier ist der Code zwar von Hand gestrickt, aber sonst sollte das
funktionieren.

Gruss
zoro17
zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Makros erzeugen Makros

Beitrag von zoro17 »

Hallo zusammen,
bin mit meinen selbst gestellten "Aufgaben" weiter gekommen.
Kann jetzt per HTML-MacroCode dynamisch Dialoge erstellen. Jetzt stellt sich
das Problem, einem z.B. Button ein Makro per Makro zuzuweisen.
Habe es mit "setPropertyValue" probiert, aber keine Eigenschaft gefunden,
die solch eine Zuweisung ermöglicht.
Hat jemand eine Idee, wie man einem Objekt per Makro Makros zuweisen
kann? Gibt es eine Übersicht, welche Attribute man pro Objekt mit
setPropertyValue einstellen kann?
Wäre dankbar für einen Hinweis.
Gruss
zoro17
*
Beiträge: 10
Registriert: Do, 04.01.2007 23:23

Beitrag von zoro17 »

Hallo zusammen,
bin etwas weiter gekommen. Anscheinend kann ich mit dem Ereignis
"Onclick" etwas bei einem Button erreichen. Dazu habe ich ein Beispiel
gefunden:

.setPropertyValue("OnClick",com.sun.star.presentation.ClickAction.DOCUMENT);

Bin da etwas hilflos, wie der 2. Parameter ein existierendes Makro
aufrufen kann.
Weiss da jemand weiter?
Gruss
Antworten