ADO schneidet Excel-Daten ab
Ich habe eine Funktion, die mit ADO ein ADODB-Recordset aus dem Inhalt eines Arbeitsblatts abruft:
Function WorksheetRecordset(workbookPath As String, sheetName As String) As adodb.Recordset
Dim objconnection As New adodb.Connection
Dim objrecordset As New adodb.Recordset
On Error GoTo errHandler
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
objconnection.CommandTimeout = 99999999
objconnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & workbookPath & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"
objrecordset.Open "Select * FROM [" & sheetName & "$]", _
objconnection, adOpenStatic, adLockOptimistic, adCmdText
If objrecordset.EOF Then
Set WorksheetRecordset = Nothing
Exit Function
End If
objrecordset.MoveLast
objrecordset.MoveFirst
Set WorksheetRecordset = objrecordset
Exit Function
errHandler:
Set WorksheetRecordset = Nothing
End Function
Ich habe ein Problem beim Importieren von Zahlen, bei denen die Zahlen auf 1 Dezimalstelle formatiert sind, aber tatsächlich 2 Dezimalstellen haben. Dies geschieht nur, wenn der Datentyp in der Spalte gemischt ist. Zum Beispiel diese Werte:
0.03
0.05
0.08
0.13
Wenn ich sie auf 1 Dezimalstelle in dieser Tabelle setze:
+-------+-----------+
| value | something |
+-------+-----------+
| 0.0 | a |
| 0.1 | a |
| 0.1 | sda |
| 0.1 | sdf |
+-------+-----------+
dann erhält das Re-Cord-Set die richtigen 2 Dezimal-Stellenwerte. Aber wenn ich sie in diese Tabelle lege:
+---------+-----------+
| value | something |
+---------+-----------+
| asdfasd | asdfas |
| 0.0 | a |
| 0.1 | a |
| 0.1 | sda |
| 0.1 | sdf |
+---------+-----------+
dann erhält das Recordset nur die 1-Dezimalstellen-Werte, z. es nimmt "0.0" statt "0.03" auf. Ich denke, das liegt daran, dass die Zeichenfolge in der ersten Zeile bewirkt, dass ADO alle Werte in den Spalten als Zeichenfolgen wie angezeigt behandelt.
Gibt es eine Möglichkeit, wie ich die Textzeichenfolge noch aufnehmen kann, aber auch die richtige Anzahl von Dezimalstellen in den Zahlenwerten erhalte?
EDIT: Gerade etwas Merkwürdiges bemerkt. Wenn ich das ausführe, während die Arbeitsmappe geöffnet ist, erhält das Re-Cord-Set die richtigen Dezimalstellen. Wenn ich es ausführe, während die Arbeitsmappe geschlossen ist, werden nur die angezeigten Dezimalstellen angezeigt.