从TXT文件创建的VBA Recordset返回Null值(Excel 2013)
解决ADODB.Recordset读取Tab分隔TXT返回Null值的问题
我来帮你拆解这个问题的排查过程和最终解决方案:
首先,你的代码逻辑和配置其实是没问题的:
- 连接字符串使用
Microsoft.Jet.OLEDB.4.0驱动,配置了正确的数据源路径和文本扩展属性(text;HDR=No;FMT=Delimited) schema.ini也正确指定了b.txt的格式为Tab分隔、无表头,并且设置MaxScanRows=0确保驱动扫描所有行来识别字段类型- 设置
CursorLocation=3(adUseClient)让RecordCount能返回正确的记录数,这部分也确实生效了
那为什么会出现记录数正确但所有字段值都是Null的情况呢?结合你最后更新的结论,核心问题出在原始TXT文件本身的损坏上,常见的这类损坏包括:
- 文件中存在不可见的控制字符(比如ASCII控制码),导致驱动解析字段内容时失败
- 换行符格式异常(比如混用了LF和CRLF,或者使用了非标准换行符)
- 文件编码不兼容(比如UTF-8带BOM,而Jet OLEDB 4.0默认优先识别ANSI编码)
- 磁盘存储导致的文件内容部分损坏
额外排查小技巧(给遇到类似问题的开发者)
如果下次再碰到这类情况,可以按以下步骤排查:
- 用记事本打开TXT文件,开启「显示所有字符」(视图→显示符号→显示所有字符),检查是否有异常的制表符、换行符或特殊字符
- 尝试将TXT文件另存为ANSI编码(如果原本是UTF-8格式),Jet驱动对ANSI编码的文本文件兼容性更好
- 先创建一个极简的测试TXT文件(比如你重新录入的那几行),确认驱动能正常解析后,再逐步替换成原文件的内容,定位损坏的具体部分
内容的提问来源于stack exchange,提问作者Maria Marienko
相关产品推荐
相关产品推荐

