gpt4 book ai didi

excel - Excel 中日期值的 ADO 查询返回工作表中格式的字符串

转载 作者:行者123 更新时间:2023-12-02 15:23:59 24 4
gpt4 key购买 nike

我正在尝试使用 ADO 查询从 Excel 工作表中提取数据。但是,日期值按照工作表上的格式返回,而不是实际的日期值。例如,值 8/12/1929 的格式为 8/12/29,因此查询返回字符串“8/12/29”。这使得仅根据记录集数据很难确定正确的日期,因为在本例中年份也可能是 2029 年。

以下是 ADO 查询的代码:

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

Set WorksheetRecordset = objrecordset
On Error GoTo 0
Exit Function


errHandler:
Set WorksheetRecordset = Nothing
On Error GoTo 0

End Function

我正在使用以下方式获取值:

Sub getValue(rs as ADODB.Recordset)

Debug.Print rs.Fields(0).Value

End Sub

部分问题可能是日期值直到几行文本之后才开始,因此当 ADO 检测到字段类型为文本时,它可能只获取可见的格式化值。有没有办法检索实际的日期值?

编辑:刚刚意识到这与我之前问过的这个问题类似:ADO is truncating Excel data 。但我没有从那个人那里得到满意的答案,所以我还是要问这个人。

最佳答案

由于您有 58 个字段,我认为最好的办法是构建一个字符串,在包含数据的工作簿上运行以下代码:

Dim rng as Range
Dim val as Variant, txt as String
Set rng = Worksheets("sheetName").Range("A3:BF3")
For Each val In rng.Value
txt = txt & "[" & val & "], "
Next val
Debug.Print txt

然后从立即窗口复制文本并粘贴到代码中,如下所示:

Dim strFields as String, strSQL as String
strFields = 'Paste the text here
'Note the FROM clause modification
strSQL = "SELECT CDATE([myDate]), " & strFields & " FROM [" & sheetName & "$A3:BF]"
'...
objrecordset.Open strSQL, _
objconnection, adOpenStatic, adLockOptimistic, adCmdText

请注意,FROM 子句的格式为[sheet$A3:BF]。这将第三行指定为包含数据的第一行。更多详情请参阅此question或者在这个link

关于excel - Excel 中日期值的 ADO 查询返回工作表中格式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com