Seite 1 von 1
Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 18:06
von Tobi09
Ich möchte ein Array aus VB6 in ein OO Calc Dokument exportieren. Dazu habe ich folgenden Code:
Code: Alles auswählen
Private Sub Command1_Click()
Dim theArray(3) As Double
Dim oSM As Object
Dim oDesk As Object
Dim oDoc As Object
Dim oSheet As Object
Dim arg()
Set oSM = CreateObject("com.sun.star.ServiceManager")
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
Set oDoc = oDesk.loadComponentFromURL("file:///C:\test.ods", "_blank", 0, arg())
theArray(0) = 123
theArray(1) = 456
theArray(2) = 789
theArray(3) = 101
Set oSheet = oDoc.sheets().getByName("Tabelle1")
Call oSheet.getCellRangeByPosition(0, 3, 3, 3).setDataArray(theArray)
End Sub
Beim Ausführen erscheint folgende Meldung:
Laufzeitfehler '1001'
[automation bridge]com.sun.star.script.CannotConvertException in
UnoConversionUtilities<T>::variantToAny! Message: conversion not
possible!
Woran kann das liegen?
Es sei noch gesagt, dass ich problemlos einzelne Werte in einzelne Zellen einfügen kann, indem ich die letzte Zeile durch z.B. das hier ersetze:
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 18:29
von Stephan
Woran kann das liegen?
Daran das das Array für die Methode .setDataArray() nicht die richtige Struktur hat.
Die richtige Struktur ist quasi ein Array im Array, da z.b. auch bei Lesen mit .getDataArray immer nur eine Arrayzelle für eine Zeile genutzt wird.
Das Ganze ist beispielsweise anhand der Datei "ComboBox" nachvollziehbar:
viewtopic.php?f=18&t=1553 (allerletzter Link auf dieser Seite)
Falls ich mich jetzt nicht vertue (denn das Folgende ist ungetetet) sollte funktionieren:
Code: Alles auswählen
theArray(0) = Array(123)
theArray(1) = Array(456)
theArray(2) = Array(789)
theArray(3) = Array(101)
aber schau Dir selbst das oben verlinkte Beispiel an.
Gruß
Stephan
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 18:32
von F3K Total
Hi,
Du versuchst ein eindimensionales Array einem zweidimensionalen Arry zuzuordnen, versuch es mal so:
Code: Alles auswählen
Dim theArray(0,3) As Double
theArray(0,0) = 123
theArray(0,1) = 456
theArray(0,2) = 789
theArray(0,3) = 101
Gruß R
ups ... timecrossing ...
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 19:12
von Frieder D.
Hallo F3K Total
du hast das Array genau falsch herum Dimensionier.
So läuft es bei mir:
Code: Alles auswählen
Sub Set_Text_To_Cell()
Dim oSM 'Root object for accessing OpenOffice from VB
Dim oDesk, oDoc As Object 'First objects from the API
Dim arg() 'Ignore it for the moment !
Dim oSheet, oCellrange
Dim theArray(3, 0)
theArray(0, 0) = 456
theArray(1, 0) = 678
theArray(2, 0) = 455
theArray(3, 0) = 1123
'Instanciate OOo : this line is mandatory with VB for OOo API
Set oSM = CreateObject("com.sun.star.ServiceManager")
'Create the first and most important service
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
'Create a new doc
Set oDoc = oDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, arg())
Set oSheet = oDoc.Sheets.GetByName("Tabelle1") '(0)
Set oCellrange = oSheet.getCellRangeByPosition(0, 3, 3, 3)
Call oCellrange.setDataArray(theArray())
End Sub
Gruß Frieder
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 19:19
von F3K Total
Hi Frieder,
komisch, deine Version läuft bei mir auf einen Fehler, während meine läuft, ich verwende OOo 3.3 was hast Du?
Gruß R
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 19:29
von Frieder D.
F3K Total hat geschrieben:Hi Frieder,
komisch, deine Version läuft bei mir auf einen Fehler, während meine läuft, ich verwende OOo 3.3 was hast Du?
Gruß R
Hallo
ich benutze LibreOffice3.3.4 .
Aber daran wird es nicht liegen.
Überprüfe mahl, ob folgende Zeile bei dir auch so aussieht:
Code: Alles auswählen
Set oCellrange = oSheet.getCellRangeByPosition(0, 3, 3, 3)
oder sieht sie vielleicht so Aus?
Code: Alles auswählen
Set oCellrange = oSheet.getCellRangeByPosition(3, 0, 3, 3)
Dan liegt es daran!
Gruß Frieder
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 20:15
von F3K Total
Ich weiß nicht warum Du mit nicht glaubst, ich habe Dein Makro kopiert und es läuft nicht.
Ändere ich die Reihenfolge läuft es. Woran es liegt, kann ich nicht sagen, deine Version ist sinnfällig (X,Y)

- F.png (118.22 KiB) 2682 mal betrachtet
Gruß R
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 20:25
von Frieder D.
Hallo F3K Total
Dann muss es wohl an meiner Version von VB liegen.
Ich benutze VBA aus MS office 2003 , da ich kein anderes VB bei mir installiert habe.
Ich kann es später mahl mit VB-Express probieren, da das so weit ich weis kostenlos ist.
Gruß Frieder
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 20:28
von F3K Total
... ich benutze das mitgelieferte Starbasic von OOo.
Gruß R
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 20:44
von Stephan
Stephan hat geschrieben:Woran kann das liegen?
Daran das das Array für die Methode .setDataArray() nicht die richtige Struktur hat.
Die richtige Struktur ist quasi ein Array im Array, da z.b. auch bei Lesen mit .getDataArray immer nur eine Arrayzelle für eine Zeile genutzt wird.
Das Ganze ist beispielsweise anhand der Datei "ComboBox" nachvollziehbar:
viewtopic.php?f=18&t=1553 (allerletzter Link auf dieser Seite)
Falls ich mich jetzt nicht vertue (denn das Folgende ist ungetetet) sollte funktionieren:
Code: Alles auswählen
theArray(0) = Array(123)
theArray(1) = Array(456)
theArray(2) = Array(789)
theArray(3) = Array(101)
aber schau Dir selbst das oben verlinkte Beispiel an.
Gruß
Stephan
Entschuldigung, ich hatte micht beachtet das es sich um einen 'horizontalen' Bereich handelt.
Folgender StarBasic-Code läuft:
Code: Alles auswählen
Dim theArray(0)
theArray(0) = ARRAY(123,456,789,101)
oSheet = ThisComponent.sheets().getByName("Tabelle1")
oSheet.getCellRangeByPosition(0, 3, 3, 3).setDataArray(theArray)
Gruß
Stephan
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 20:54
von Frieder D.
Hallo Stephan, Hallo F3K Total
Es geht hier nicht um das integrierte StarBasic, sondern ,
wie die Überschrift sagt um VisualBasic (Von Winzig Weich) kurz VB, oder MS VB.
Array von VB6 nach Calc exportieren verursacht Fehler
Wäre es in StarBasic (kurz SB) geschrieben, könnte mann sich die folgenden Anweisungen einfach sparen:
Code: Alles auswählen
Set oSM = CreateObject("com.sun.star.ServiceManager")
'Create the first and most important service
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
Set...
Call...
und durch volgendes ersetzen:
Arrays sind in VB genau andersherum als in SB.
Gruß Frieder
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 21:14
von Stephan
Es geht hier nicht um das integrierte StarBasic, sondern ,
wie die Überschrift sagt um VisualBasic
Ja, Du hast Recht, ich hätte das klarstellen sollen:
Ich war mir bei meinem ersten post nicht bewußt das es explicit um VB6 geht. Bei meinem zweiten post war ich mir dessen sehr wohl bewußt ohne es gesagt/geschrieben zu haben, jedoch diente mein post nur zur Richtigstellung meines ersten posts denn der dortige StarBasic-Code war falsch.
Ansonsten:
Sorry ich kann hier nichts beitragen weil ich zu faul bin VB6 zu installieren (ich müßte auch erstmal die Installations-CDs suchen, ich glaube ich habe das seit ca. 2005 nicht mehr benutzt).
Gruß
Stephan
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 22:06
von Tobi09
DANKE, so gehts! (Frieders Version)
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Fr, 03.02.2012 22:09
von F3K Total
Gut,
Frieder D. hat geschrieben:Arrays sind in VB genau andersherum als in SB
dann habe ich etwas gelernt.
Egal wie, VB oder SB, Tobi09 wird jetzt zum Ziel kommen!
Frieder D. hat geschrieben:volgendes
schreibt man übrigens mit einem
f am Anfang.
Gruß R
Re: Array von VB6 nach Calc exportieren verursacht Fehler
Verfasst: Sa, 04.02.2012 08:05
von Frieder D.
Hallo
F3K Total hat geschrieben:Frieder D. hat geschrieben:volgendes
schreibt man übrigens mit einem
f am Anfang.
Gruß R
Ich hoffe du wirst einem armen Legastheniker nochmal verzeihen, dass er ein rot unterstrichenes Wort übersehen hat.
Gruß Frieder