Ich hab mal wieder ein kleines Problem mit einer kleinen funktion. Die funktion soll alle Zellen einer xls-Tabelle in einen Array einlesen.
Das klappt auch alles wunderbar. Mit der einen ausnahme das alle Zellen in denen in der xls-Tabelle ein Datum drin steht im Recordset leer sind.
Unten findet ihr die funktion und ich hoffentlich ein paar schlaue ideen von euch
[autoit]Func _excel2array($src_dir, $tableName, $columes) ; liest aus der xls in $src_dir aus dem Tabellenblatt $tableName $columes spalten aus
[/autoit][autoit][/autoit][autoit]; SchemaEnum
Const $adSchemaTables = 20
; CursorLocationEnum
Const $adUseClient = 3
; Instanziirung der Connection-Klasse. Mit diesem Objekt wird eine dauerhafte Verbindung
; zu einer Datenquelle hergestellt.
Dim $cn = ObjCreate('ADODB.Connection')
; OLEDB-Provider für die Verbindung festlegen.
$cn.Provider = 'Microsoft.Jet.OLEDB.4.0'
; Es wird eine Verbindungszeichenfolge(Connection String auch Init String) erwartet. Die Zeichenfolge ist
; eine Reihenfolge von Attribut-Wert-Zuweisungen.
$cn.ConnectionString = 'Data Source=' & $src_dir & ';Extended Properties=Excel 8.0;'
; Speicherort der Cursorbibliothekt setzen.
$cn.CursorLocation = $adUseClient
; Eine Verbindung zur Datenquelle öffnen.
$cn.Open()
ConsoleWrite("open connection to database" & @CRLF)
Dim $rsTables = $cn.OpenSchema($adSchemaTables)
Dim $criterias[4]
$criterias[2] = $tableName
Dim $rsColumns = $cn.OpenSchema(4, $criterias)
[/autoit][autoit][/autoit][autoit]Dim $rs = $cn.Execute('[' & $tableName & '$]')
Dim $array[$columes][$rs.RecordCount]
; Iteration über alle Spalten
ConsoleWrite("read " & $columes & " columns" & @CRLF)
ConsoleWrite("read " & $rs.RecordCount & " rows" & @CRLF)
For $c = 0 To $columes - 1
; Springt zum ersten Datensatz
$rs.MoveFirst()
; Iteration über alle Datensätze
[/autoit][autoit][/autoit][autoit]For $r = 0 To $rs.RecordCount - 1
[/autoit][autoit][/autoit][autoit]; Ausgabe der Werte zur Kontrolle
;ConsoleWrite(' ' & $rs.Fields($c).Value & @CRLF)
$array[$c][$r] = $rs.Fields($c).Value
; zum nächsten Datensatz springen
$rs.MoveNext()
Next ; r <-- Daten
; zur nächsten Datenspalte springen
;$rsColumns.MoveNext()
Next ; $c <-- Spalten
ConsoleWrite("done with reading" & @CRLF)
[/autoit][autoit][/autoit][autoit]; Geöffnete Verbindungen schliesen
$rs.Close()
$rsColumns.Close()
$rsTables.Close()
$cn.Close()
ConsoleWrite("connection succesfully closed" & @CRLF)
[/autoit][autoit][/autoit][autoit]Return $array
[/autoit][autoit][/autoit][autoit]EndFunc ;==>_excel2array
[/autoit]