Seite 1 von 1
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Mi, 01.09.2010 11:03
von bst
Hi,
irgend etwas ist da M.E. anders als unter VBA? Dieses hier funktioniert in VBA problemlos:
Code: Alles auswählen
Option Explicit
Sub x()
Dim re As Object, mc As Object, i As Integer, j As Integer
Set re = CreateObject("vbscript.regexp")
re.Pattern = "(\d)\d(\d)"
re.Global = True
Set mc = re.Execute("123 + 456 <> 789")
For i = 0 To mc.Count - 1
For j = 0 To mc(i).Submatches.Count - 1
Debug.Print i, j, mc(i).Submatches(j)
Next
Next
Set mc = Nothing
Set re = Nothing
End Sub
in OOBasic bekomme ich das nicht ans Laufen, beim Zugriff auf mc(i) ist Schluss
"Eigenschaft oder Methode nicht gefunden: SubMatches"
Dabei ist übrigens egal ob ich den Code genau so wie oben hernehme oder das Objekt so erstelle:
Code: Alles auswählen
oOLEService = createUnoService("com.sun.star.bridge.oleautomation.Factory")
re = oOLEService.createInstance("vbscript.regexp")
cu, Bernd
--
Windows XP, Office 2003, OOo 3.2.1
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Mi, 01.09.2010 16:25
von bst
Nochmals Hallo,
ich glaube ich hab's verstanden
UNO unterstützt keine Collections!!
http://wiki.services.openoffice.org/wik ... s_from_UNO schreibt:
Unlike UNO properties, Automation properties can have arguments.
Und diese Teile heißen im VBA in Excel, Word, ... eben Collections.
Damit funktioniert hier so etwas wie unten.
Könnte das so passen?
cu, Bernd
--
Code: Alles auswählen
Option Explicit
Sub x()
Dim oRegExp As Object, oMatchCollection As Object, oMatch As Object, i As Integer, j As Integer
dim arAny(0) As Any
oRegExp = CreateObject("vbscript.regexp")
oRegExp.Pattern = "(\d)\d(\d)"
oRegExp.Global = True
oMatchCollection = oRegExp.Execute("123 + 456 <> 789")
For i = 0 To oMatchCollection.Count - 1
arAny(0) = i
oMatch = oMatchCollection.Invoke("Item", arAny, Array(), Array())
for j = 0 to oMatch.SubMatches.Count - 1
arAny(0) = j
print oMatch.SubMatches.Invoke("Item", arAny, Array(), Array())
next
Next
End Sub
bzw. so etwas:
Code: Alles auswählen
Option Explicit
Sub x2()
Dim oExcel as object, oWorkbook As Object, oSheet As Object, i as integer
dim arAny(0) As Any
oExcel = CreateObject("Excel.Application")
oExcel.WorkBooks.Open "e:\test\test.xls"
' oWorkbook = oExcel.ActiveWorkbook ginge natürlich auch ;-)
arAny(0) = "test.xls"
oWorkbook = oExcel.WorkBooks.Invoke("Item", arAny, Array(), Array())
for i = 1 to oWorkbook.Sheets.Count
arAny(0) = i
oSheet = oWorkbook.Sheets.Invoke("Item", arAny, Array(), Array())
print oSheet.Name
next
End Sub
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Fr, 04.09.2015 10:17
von Kappler
Ich grabe noch mal diesen alten Thread aus (ich hoffe das stört hier nicht):
Auf das selbe Problem bin ich auch gestoßen, die aufgezeigte Lösung funktioniert so bei mir aber leider nicht.
Wobei ich gestehen muss, dass ich das gezeigte Vorgehen nur zum Teil verstehe

...
Zunächst mal hat dies nicht funktioniert:
Das konnt ich aber mittlerweile lösen durch:
Code: Alles auswählen
Dim oOleService As Object : oOLEService = createUnoService("com.sun.star.bridge.oleautomation.Factory")
oRegExp = oOLEService.createInstance("vbscript.regexp")
Jetzt meckert er mir aber das Invoke an:
Code: Alles auswählen
oMatch = oMatchCollection.Invoke("Item", arAny, Array(), Array())
Fehlermeldung:
Code: Alles auswählen
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.script.CannotConvertException
Message: [automation bridge]UnoConversionUtilities<T>::anyToVariant
Cannot convert the value of type :"string" to the expected Automation type of VARTYPE: 3.
So wie ich das verstehe erwartet er als ersten Parameter für Invoke keinen String sondern eventuell einen Index der Funktion "Item".
Nur: Wo bekomme ich diesen Index bzw. diese Ordnungszahl her?
Entweder ich suche nach den falschen Schlagworten oder es gibt hierzu tatsächlich keine Quellen im Netz (was ja fast nicht seinn kann)...
Hat jemand eine Idee hierzu?
Danke und schöne Grüße aus dem Schwarzwald,
Andreas
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Fr, 04.09.2015 10:39
von Karolus
Nimm halt python statt Basic, da brauchst du auch nicht solche wilden Konstrukte:
Code: Alles auswählen
Dim oOleService As Object : oOLEService = createUnoService("com.sun.star.bridge.oleautomation.Factory")
oRegExp = oOLEService.createInstance("vbscript.regexp")
sondern einfach nur:
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Fr, 04.09.2015 10:43
von Kappler
Das mit dem RegExp war nur ein Beispiel (von weiter oben im Thread), aktuell geht es mir darum, die API unseres Fax/Mailservers (Tobit David) einzubinden.
Und da stoße ich eben auf das genannte Problem...
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Fr, 04.09.2015 11:08
von Karolus
Re: COM-Komponent (MS) unter OOo Basic nutzen
Verfasst: Fr, 04.09.2015 11:11
von Kappler
Auch das hilft mir nicht wirklich weiter (trotzdem vielen Dank):
Unter MS Word läuft es so wie ich will, mein Problem ist die Anbindung der COM-Komponente unter OpenOffice (bzw. LiO)...