Makroausführung OLE Automation

Setup und Komponenten-übergreifende Probleme.

Moderator: Moderatoren

evac
Beiträge: 4
Registriert: Do, 04.10.2007 08:31

Makroausführung OLE Automation

Beitrag von evac »

Hallo zusammen,

ich steh hier vor einem für mich ernsten Problemchen. Eventuell ist die Lösung jedoch total einfach.

Ich habe eine Vorlage für ein Writer-Dokument (.ott), die ein Makro enthält, welches beim -Dokument Erzeugen- Event ausgelöst werden soll.

Das geschieht auch anstandslos, falls ich das Dokument über einen Doppelklick im Datei-Explorer unter Windows öffne.
Sodann wird OpenOffice-Writer gestartet, es erscheint der Hinweis von wegen dieses Dokument enthält ein Makro und ein neues Dokument wird aus der Vorlage erzeugt.


Allerdings wird das Makro nicht ausgeführt, wenn ich die Vorlage aus LotusNotes heraus per OLE-Automation öffne. Und das ist hinreichend blöd.
Gehe ich in dem erzeugten Dokument über Extras - Makros usw., wähle das Makro -Main- und klicke auf -Ausführen- erscheint die Meldung

Aus Sicherheitsgründen ist dieses Makro nicht ausführbar


Vielleicht noch ein paar Daten
OpenOffice-Version 2.2.0
Lotus Notes Version 7.0.1

Ich öffne die Vorlage aus Notes heraus, da hier erstmal Daten gesammelt werden, die dann in das erzeugte Dokument übernommen werden sollen. Das klappt auch, nur fehlt dann anschließend die Funktion für Textbausteine, die ja in dem nicht ausgeführten Code enthalten ist.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makroausführung OLE Automation

Beitrag von komma4 »

evac hat geschrieben: Aus Sicherheitsgründen ist dieses Makro nicht ausführbar


Vielleicht noch ein paar Daten
OpenOffice-Version 2.2.0
Lotus Notes Version 7.0.1

Ich öffne die Vorlage aus Notes heraus, da hier erstmal Daten gesammelt
Offensichtlich das Problem des Aufrufs: hier musst Du OOo die Ausführung von Makros erlauben.
Deshalb die Frage: wie findet der Aufruf statt?
Reicht vielleicht auch das Einstellen der Makrosicherheit, Stichwort "Vertrauenswürdige Quellen"?
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)
evac
Beiträge: 4
Registriert: Do, 04.10.2007 08:31

Re: Makroausführung OLE Automation

Beitrag von evac »

Der Aufruf erfolgt in Notes mit folgender LotusScript-Zeile:

Set objDoc = objDskTop.loadComponentFromUrl(docUrl, "_blank", 0, args)

docUrl enthält dann sowas wie -file:///i:/OO Textvorlage/blankoBrief.ott-

Ich habe diesen Pfad (also bis OO Textvorlage) auch schnonmal zu den Vertrauenswürdigen Quellen hinzugefügt und die Sicherheitsstufe auf -Sehr hoch- gesetzt. Hat auch nicht geholfen.

Aber wie gesagt, kann diese Vorlage -blankoBrief.ott- ja auch im Datei-Explorer doppelgeklickt werden.
Dann funktioniert das mit dem Code in der Vorlage seltsamerweise.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makroausführung OLE Automation

Beitrag von komma4 »

Also, wenn aus dem Explorer ausgeführt wird, sollte Deine Quelle als vertrauenswürdig eingestuft werden.


Für einen Aufruf aus dem Skript (sieht wie VBA aus, eehh?) gebe dem Code die Makroerlaubnis mit

Code: Alles auswählen

Dim oOpenProperties(0) as new com.sun.star.beans.PropertyValue
' open options:
' 0: execute macros with no warning message
oOpenProperties( 0 ).Name = _
 "MacroExecutionMode"
oOpenProperties( 0 ).Value = _
 com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN ' value 4
Set objDoc = objDskTop.loadComponentFromUrl(docUrl, "_blank", 0, oOpenProperties() )
(Achtung: Zeilenumbruch)

Klappt es damit?
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)
evac
Beiträge: 4
Registriert: Do, 04.10.2007 08:31

Re: Makroausführung OLE Automation

Beitrag von evac »

Na das werde ich doch mal morgen ausprobieren!

Allerdings wäre das ja ein netter Parameter. Kann man einfach so den Hinweis von wegen Makros enthalten umgehen und Makros auf alle Fälle ausführen?
Also wenn das hinhaut, wäre ich ja schon einigermaßen überrascht.

LotusScript und VBA haben in der Tat ne Menge Ähnlichkeiten.
Das macht es dann ganz bequem, wenn man zwischen beiden wechseln muss.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makroausführung OLE Automation

Beitrag von komma4 »

Wie könnte eine Automatisierung funktionieren, wenn es einen solchen Schalter nicht gäbe?

Fundstelle: DevelopersGuide und Mögliche Schalter-Werte
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)
evac
Beiträge: 4
Registriert: Do, 04.10.2007 08:31

Re: Makroausführung OLE Automation

Beitrag von evac »

Ok, ich verneige mich vorläufig :)

Denn es muss noch auf einem in Hannover gehosteten System laufen. Aber dann kommt die endgültige Verneigung.
Hab allerdings gleich Value -4- genommen und nicht die ausgeschriebene Version. Mir ist so, als hätte ich das schonmal versucht und es ging nicht.

Was meine Verwunderung wegen dieser no_warn Geschichte betrifft:
Ich habe tatsächlich erwartet, dass das für alle Makros, auch solche, die nicht signed sind oder aus vertrauenswürdigen Quellen kommen, funktioniert.

Den gehosteten Test mache ich am Montag und bin da guter Dinge.
MoC08
*
Beiträge: 17
Registriert: Mo, 30.06.2008 08:54

Re: Makroausführung OLE Automation

Beitrag von MoC08 »

Hallo,

habe das selbe Problem, nur habe ich es mit dem oben angegebenen Code nicht hingekriegt....
Es könnte natürlich an meiner Übersetzung in Lotus Script liegen

hat jemand das Problem schon gelöst???

MFG

MoC08
MoC08
*
Beiträge: 17
Registriert: Mo, 30.06.2008 08:54

Re: Makroausführung OLE Automation

Beitrag von MoC08 »

hier mein Code (bringt immer die Fehlermeldung Subscript out of range)

Code: Alles auswählen

	Dim SM As Variant
	Dim Desktop As Variant
	Dim oOpenProperties()
	Set SM=CreateObject("com.sun.star.ServiceManager")
	Set Desktop=SM.createInstance("com.sun.star.frame.Desktop")
	
'0: execute macros with no warning message
	oOpenProperties(0).Name = "MacroExecutionMode"
	oOpenProperties(0).Value = "com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN" ' value 4
	

	Dim objDocument As Variant
	Set objDocument=Desktop.loadComponentFromURL("file:///c:/BriefVorlage01.ott","_blank",0,oOpenProperties())
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Makroausführung OLE Automation

Beitrag von turtle47 »

Das Problem hat mich auch schon mal beschäftigt und folgender Code hat nicht funktioniert

Code: Alles auswählen

   Dim mArgs(0) as New com.sun.star.beans.PropertyValue
	mArgs(0).Name = "MacroExecutionMode"
	mArgs(0).Value = "com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN"
	oDocument = StarDesktop.loadComponentFromURL(sUrl,"_blank",0, mArgs())
bis ich folgende Codezeilen verwendet habe:

Code: Alles auswählen

   Dim mArgs(0) as New com.sun.star.beans.PropertyValue
	mArgs(0).Name = "MacroExecutionMode"
	mArgs(0).Value = 4
	oDocument = StarDesktop.loadComponentFromURL(sUrl,"_blank",0, mArgs())
Makros in den per Makro geladenen Dokumenten lassen sich anstandslos ausführen.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makroausführung OLE Automation

Beitrag von komma4 »

turtle47 hat geschrieben:... und folgender Code hat nicht funktioniert
Liegt das an den Anführungszeichen bei der .Value Zuweisung:

Code: Alles auswählen

Sub sayKonstante
print com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
print com.sun.star.document.MacroExecMode.USE_CONFIG_APPROVE_CONFIRMATION
End Sub
Mit "" wird ein string gesetzt....
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makroausführung OLE Automation

Beitrag von komma4 »

MoC08 hat geschrieben:hier mein Code (bringt immer die Fehlermeldung Subscript out of range)

Code: Alles auswählen

	Dim SM As Variant
	Dim Desktop As Variant
	Dim oOpenProperties()
... kann es sein, dass Deine Meldung am fehlenden (fehlerhaften!) Datentyp liegt??!

Deine oOpenProperties ist ein variant, Du brauchst aber ein

Code: Alles auswählen

as New com.sun.star.beans.PropertyValue
.
Sagt ja auch die Fehlermeldung: kein Typ.

Klappt es damit?
Haste mal bei DannyB geschaut, der hat doch Delphi-Beispiele...?
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)
Antworten