COM-Komponent (MS) unter OOo Basic nutzen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: COM-Komponent (MS) unter OOo Basic nutzen

Re: COM-Komponent (MS) unter OOo Basic nutzen

von Kappler » Fr, 04.09.2015 11:11

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)...

Re: COM-Komponent (MS) unter OOo Basic nutzen

von Karolus » Fr, 04.09.2015 11:08

Re: COM-Komponent (MS) unter OOo Basic nutzen

von Kappler » Fr, 04.09.2015 10:43

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

von Karolus » Fr, 04.09.2015 10:39

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:

Code: Alles auswählen

import re

Re: COM-Komponent (MS) unter OOo Basic nutzen

von Kappler » Fr, 04.09.2015 10:17

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:

Code: Alles auswählen

   oRegExp = CreateObject("vbscript.regexp")
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

von bst » Mi, 01.09.2010 16:25

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

von bst » Mi, 01.09.2010 11:03

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

Nach oben