[gelöst] Routinenname mit Variablen starten

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

Moderator: Moderatoren

craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von craig22 »

Vielen Dank für den Link.

In Richtung Scriptinghost habe ich auch gesucht, weil ich damit unter VB und VBA gearbeitet habe.
Habe aber nicht herausbekommen, wie ich die Strings aus Starbasic zwecks Ausführung übergeben soll.

Wenn ich die letzte Antwort in Deinen Bug-Report richtig verstanden
habe, dann kann LO WSH nicht ausführen, weil es 64-bittig ist.
Wegen der Probleme mit LO, wäre für eine Lösung mit dem WSH dann für mich weniger interessant.
Das Programm soll unter LO, als auch unter AOO lauffähig sein.

Hinweis:
Der von mir genutzte Service und das Interface habe ich unter
LO 7.0.1.2 (x64) und AOO 4.1.6 erfolgreich getestet.
Stephan hat geschrieben:aber egal, Dein Ansatz ist im DEtail interessanter.
Danke.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Hiker
******
Beiträge: 591
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von Hiker »

craig22 hat geschrieben: Sa, 28.11.2020 20:14 ...
Wenn ich die letzte Antwort in Deinen Bug-Report richtig verstanden
habe, dann kann LO WSH nicht ausführen, weil es 64-bittig ist.
Soweit ich das verstanden habe, ist das Problem, das ein 32 Bit Office auf einen 64-bit wsh treffen kann und umgekehrt, was in beiden Fällen nicht funktionieren würde. Ähnlich wie bei Java muss es passen, wofür es aber keine Garantie gibt.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von Stephan »

Soweit ich das verstanden habe, ist das Problem, das ein 32 Bit Office auf einen 64-bit wsh treffen kann und umgekehrt, was in beiden Fällen nicht funktionieren würde.
Interessanter Einwurf. Das bringt dann wieder meinen ursprünglichen Gedanken nach vorn, den ich inzwischen schon als weniger interessant abgetan hatte: erstelle per Makro ein Script und startete es per Makro, denn dabei kann es keine Probleme mit 32 vs. 64 Bit geben, wenn das Starten mit der Defaultanwendung des Systems erfolgt und OO/LO sich übrerhaupt nicht um die Zuordnung kümmern muss, sondern das das Betreiebssystem regelt.

z.B. Makro "Main" in "Module1" von "meine Makros" starten:

Code: Alles auswählen

Sub WSH_Test()
	Dim par(0) as New com.sun.star.beans.PropertyValue
	par(0).Name = "Hidden"
	par(0).Value = True
	
	Dim x As String
	
	x = "On Error Resume Next"
	x = x & CHR(13) & "Set oServiceManager = CreateObject(""com.sun.star.ServiceManager"")"
	x = x & CHR(13) & "Set oDesktop = oServiceManager.CreateInstance(""com.sun.star.frame.Desktop"")"
	x = x & CHR(13) & "Dim mNoArgs()"
	x = x & CHR(13) & "Set oDispatcher = oServiceManager.CreateInstance(""com.sun.star.frame.DispatchHelper"")"
	x = x & CHR(13) & "ergebnis = oDispatcher.executeDispatch(oDesktop, ""macro:///Standard.Module1.Main"", """", 0, mNoArgs)"
	
	doc = StarDesktop.loadComponentFromURL( "private:factory/swriter" , "_blank", 0, par() )
	doc.Text.String = x
	
	par(0).Name = "FilterName"
	par(0).Value = "Text"
	doc.storeToUrl(ConvertToURL("D:\meinScript.vbs") , par())
	doc.close(True)
	
	'Wait 100
	
	Dim starten as object 
	starten = createUnoService("com.sun.star.system.SystemShellExecute") 
	starten.execute(ConvertToUrl("D:\meinScript.vbs"), "", 0)
End Sub
Das "On Error Resume Next" vermeidet nur eine Fehlermeldung des Scripting Hosts selbst, die bei mir auftritt. MIr ist momentan unklar warum diese auftritt, der Scriptinghost meckert über KLammern (Windows 7, 64 Bit)



Gruß
Stephan
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von craig22 »

@Stephan
eine kurze Rückmeldung:
  • AOO 4.1.6
    • Funktioniert bei mir, wenn das aufrufende Makro (Sub WSH_Test()) im selben Modul wie das auszuführende Makro (Sub Test()) steht.
    • Wenn das aufrufende Makro (WSH_Test()) in einem anderen Modul steht, als das auszuführende Makro (Test()), dann
      läuft das Makro kommentarlos durch, ruft aber nicht "Sub Test()" auf.
    • Fehlermeldung wenn ich „On Error“ deaktiviere.
  • LO 7.0.1.2 (x64)
    • Funktioniert bei mir in beiden Fällen nicht, d.h. "Sub Test()" wird nicht aufgerufen.
    • Keine Fehlermeldung, auch nicht wenn ich „On Error“ deaktiviere.
  • LO 7.2.0.0.alpha0+ (x64)
    • Funktioniert bei mir in beiden Fällen nicht, d.h. "Sub Test()" wird nicht aufgerufen.
    • Keine Fehlermeldung, auch nicht wenn ich „On Error“ deaktiviere.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von Stephan »

Wenn das aufrufende Makro (WSH_Test()) in einem anderen Modul steht, als das auszuführende Makro (Test()), dann
läuft das Makro kommentarlos durch, ruft aber nicht "Sub Test()" auf.
Offensichtlich muss, unter diesen Bedingungen, die Bibliothek vorher gelanden werden. Nö, ich habe das nicht ausprobiert, nur mir sticht es sofort ins Auge weil es bei OO allgemein so ist(*) das ich eine Bibliothek erst laden muss bevor ich darauf zugreifen kann.


(*)
Ausnahmen sind (wohl auch heute noch) die Bibliothek Standard, obwohl ich diese inzwischen vorsichztshalber, in Makroprojekten, auch immer explizit lade, sowie die Besonderheit das nach Fehleranzeige einer nicht geladenen Bibliothek OO diese anschliessend kommentarlos lädt.


Zu LO kann ich auf die Schnelle nichts sagen da ich kein Windows Testsystem habe wo LO als Standard-Applikation eingebunden ist.



Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von Stephan »

Offensichtlich muss, unter diesen Bedingungen, die Bibliothek vorher gelanden werden.
Ich habe das jetzt getestet und kann meiune Aussage nicht bestätigen. Bei mir startet ein Makro das sich in "Module1" von "Testbibliothek" befindet einwandfrei (Windows 7 64 Bit, AOO 4.1.6).
Ja, ich habe OO vorher neu gestartet um auszuschliessen das es im Hintergrunf die Bibliothek noch geladen hatte.

Könntest Du einmal schauen was passiert wenn Du bei Dir meinScript.vbs per Doppelklick startest? Ich bekomme zwar, richtigerweise, eine Meldung wenn *.vbs nicht auf dem SYstem registriert ist, aber man weiß ja nie.


Gruß
Stephan
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von craig22 »

Hallo Stephan,
  1. Laden der Bibliothek "Standard" Bezug auf das Dokument, nicht auf "Meine Makros & Dialog/ Standard"
    mittels

    Code: Alles auswählen

    BasicLibraries.LoadLibrary( "Standard" )
    veränderte auch nicht das Verhalten. Weder unter LO, noch unter AOO.

    D.h. für AOO Dein Script muss bei mir in dem Modul gespeichert sein, in welchem die aufzurufende Routine gespeichert ist.
    Modul1 = Script → Modul2 = Sub-Routine funktioniert nicht.
  2. Ja, ich habe OO vorher neu gestartet um auszuschliessen das es im Hintergrunf die Bibliothek noch geladen hatte.
    Ja, habe ich auch erfolglos getestet
  3. Stephan hat geschrieben:Könntest Du einmal schauen was passiert wenn Du bei Dir meinScript.vbs per Doppelklick startest?
    es blitzt nur kurz ein Fenster auf; Es passiert aber nichts.
    Egal ob AOO geschlossen ist oder ob das Dokument mit dem Makro geöffnet ist.
    Ich vermute, dass im Fall: AOO geschlossen ein solche Anweisung in der Batch fehlt:

    Code: Alles auswählen

    SET L="C:/Program Files/LibreOffice/program/soffice.exe"
    SET M="macro:///Standard.macro:///Standard.Module2.Main()"
    %L% --nologo %M%
  4. Mein Verdacht geht nun in die Richtung, dass "meinScript.vbs" keine Angaben / keine URL zum Dokument enthält.
    oDesktop liefert das gesuchte Dokument nur über:

    Code: Alles auswählen

    oDesktop.Frames.getByIndex(?)
    Dazu ist dann aber noch eine Enumeration erforderlich, welche dann den Dokumenttitel ausliest und vergleicht.
    Der Index allein ist ja nichts sagend, man weiß nicht welcher Index das gewünschte Dokument wiederspiegelt.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von Stephan »

Laden der Bibliothek "Standard" Bezug auf das Dokument, nicht auf "Meine Makros & Dialog/ Standard"
mittels
Das kann nichts bewirken denn es ist nicht möglich einfach(*) von außen her ein in einem Dokument gespeichertes Makro zu starten.

(*)
ich bin nicht sicher ob es jenseits des weiter unten stehenden nicht noch einen Trick gibt, irgendwie ist mir so als hätte mal jemand (ich nicht) etwasa ausgeknobelt.


Wenn ich Dein Tun richtig verstehe, dann solltest Du einfach mal das aufzurufende Makro in "Meine Makros ..." speichern.


Nicht ganz sicher bin ich mir ohne Nachrecherchieren ob nur der Weg über des Aufrufen eines Dokuments UND Start des Makros per Ereignis geht oder ob man bei Aufruf des Dokuments per Skript auch direkt ein Dokument-Makro per Parameter (zusätzlich) angeben kann.



Gruß
Stephan
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von craig22 »

Hallo Stephan,

es geht nach wie vor um das Thema "Starten einer Sub-Routine mittels einer String-Variablen".
Die Lösung habe ich gefunden, damit ist doch ersteinmal alles OK und gelöst.

Dein Script war für mich aber auch interessant und ich habe verschiedene Methoden versucht,
um dieses unter LO, als auch unt AOO auszuführen. Dabei sind dann verschiedene Stolpersteine
aufgetaucht, welche ich berichtet habe.
Stephan hat geschrieben:Das kann nichts bewirken denn es ist nicht möglich einfach(*) von außen her ein in einem Dokument gespeichertes Makro zu starten.
(*)
ich bin nicht sicher ob es jenseits des weiter unten stehenden nicht noch einen Trick gibt, irgendwie ist mir so als hätte mal jemand (ich nicht) etwasa ausgeknobelt.
Mir reicht meine herausgefundene Methode, deshalb werde ich nicht weiter in diese Richtung recherchieren.
Stephan hat geschrieben:Wenn ich Dein Tun richtig verstehe, dann solltest Du einfach mal das aufzurufende Makro in "Meine Makros ..." speichern.
Auch dies habe ich getestet, inklusive Laden der Bibliothek bei Programmstart:

Code: Alles auswählen

GlobalScope.BasicLibraries.LoadLibrary( "Standard" )
Stephan hat geschrieben:Nicht ganz sicher bin ich mir ohne Nachrecherchieren ob nur der Weg über des Aufrufen eines Dokuments UND Start des Makros per Ereignis geht oder ob man bei Aufruf des Dokuments per Skript auch direkt ein Dokument-Makro per Parameter (zusätzlich) angeben kann.
Starten per Script mit Übergabe der Stringvariablen wahr ja auch nur ein Nebengedanke, weil ich anfänglich zum Hauptthema " Routinenname mit Variablen starten" keine Lösung fand.

Meinerseits habe mehr als ausreichend getestet, herausgefunden und eine auch für mich interessante Lösung gefunden.

Abschließend noch einen besonderen Dank an Pit für diese Anfrage.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: [gelöst] Routinenname mit Variablen starten

Beitrag von erikafuchs »

Abschließend noch einen besonderen Dank an Pit für diese Anfrage.
Ich bin ja ganz gerührt und ich hoffe, ihr versteht, dass ich vom letzten Teil der Diskussion nur Bahnhof verstanden habe, es freut mich aber wenn ich Euch einen netten Austausch ermöglicht habe - gerne wieder.
Antworten