我有得到利用ADO工作表的內容的ADODB記錄,如下功能:ADO被截斷的Excel數據
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
我在導入數數據的問題,其中的數字格式到1位小數,但他們實際上有2個小數位。這隻有在數據類型在列中混合時纔會發生。例如,這些值:
0.03
0.05
0.08
0.13
當我在這個表將它們設置爲1的小數位:
+-------+-----------+
| value | something |
+-------+-----------+
| 0.0 | a |
| 0.1 | a |
| 0.1 | sda |
| 0.1 | sdf |
+-------+-----------+
然後記錄得到正確的2個小數位值。但是,當我把它們放在這張表中時:
+---------+-----------+
| value | something |
+---------+-----------+
| asdfasd | asdfas |
| 0.0 | a |
| 0.1 | a |
| 0.1 | sda |
| 0.1 | sdf |
+---------+-----------+
然後記錄集只獲得1位小數位值,它會選擇「0.0」而不是「0.03」。我認爲這是因爲第一行中的字符串導致ADO將列中的所有值視爲顯示的字符串。
有沒有辦法,我仍然可以拿起文本字符串,但也獲得正確的數字值的小數位數?
編輯:只是注意到一些奇怪的東西。當我在工作簿打開時運行這個時,記錄集會得到正確的小數位數。如果在工作簿關閉時運行它,它只會顯示小數點。
您是從工作簿還是其他應用程序調用代碼? – Santosh
如果這是Excel-VBA,爲什麼不考慮利用Excel對象模型並打開源工作簿?您可以將光標變爲沙漏並關閉屏幕更新,因此用戶不會「看到」打開然後關閉的工作簿。在所有退出路徑上重新啓用屏幕更新*,特別是錯誤退出路徑*,以避免支持用戶說「我的Excel只是凍結」。 –
@Santosh,這是從另一個工作簿中調用。 – sigil