Excel工作表SQL提取数据异常:13.24变为14.24求助
问题分析与解决建议
你的问题核心是Jet/ACE SQL引擎读取Excel数据时,自动推断列类型错误:数值13.24被误识别为日期类型,后续转换时因Excel 1900日期系统的闰年bug(错误认为1900年是闰年)导致序列号偏移1,最终显示为14.24;而-13.24因带负号,不会被引擎误判为日期,所以显示正常。13.24本身并非SQL或Excel中的特殊数值,只是刚好触发了类型推断的异常。
具体解决建议:
- 强制SQL连接读取混合类型列:修改Excel连接字符串,添加
IMEX=1参数,强制引擎将包含混合类型的列(如Amount列)以文本形式读取,避免自动类型推断错误。示例连接字符串:strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""" - 显式转换Amount列为数值:在SQL语句中用
CDBL()函数强制转换Amount列,确保数值类型正确。修改后的SQL片段如下:vsql = "SELECT [Region Name], [Site Ledger Code],[GL Account], [DeptID], [Emp Number], [Emp Name]," _ & "IIF (ISNUMERIC(MID([Description],1,3)) = TRUE, MID([Description],1,3), """"), " _ & "IIF (ISNUMERIC(MID([Description],1,3)) = TRUE, MID([Description],7,(LEN ([Description])-6)), [Description]), " _ & "IIF ([TTYPE] = ""Debit"", CDBL([Amount]), 0) AS Debit, " _ & "IIF ([TTYPE] = ""Credit"", CDBL([Amount]), 0) as Credit, " _ & "CDBL([Amount]) AS [Amount], [Pay Date]" _ & "FROM [" & WrkShtName & "$]" _ & "WHERE [Description] <> ""Net Pay"" and [Description] <> ""NPA - Net Pay Adjustment (US)""" - 检查源文件格式:确保源Excel中Amount列的单元格格式设置为数值,而非日期或文本。若存在文本格式的数值,先批量转换为数值格式再处理。
- 验证Recordset类型:读取Recordset时,添加代码检查
rs.Fields("Amount").Type,确认其为数值类型(如adDouble)而非日期类型(adDate),提前排查类型错误。
内容的提问来源于stack exchange,提问作者Shaves
相关产品推荐
相关产品推荐

