VBA中ADODB记录集读取含额外点号CSV报错 如何转义特殊字符
问题说明
运行VBA ADODB方式读取CSV文件时触发错误,待读取文件名为COTPMS1_20220701.txt_01072022_01h15m20s.csv,报错根因是文件名(除去.csv扩展名的部分)包含半角点号特殊字符,要求不复制文件到其他目录、不重命名原文件的前提下完成读取。
原报错代码如下:
Sub testSpecialCharacter() Dim cn As Object Dim rsT As Object Dim fullpath As String, _ ExtendedProp As String, _ query As String Set cn = CreateObject("ADODB.Connection") Set rsT = CreateObject("ADODB.Recordset") fullpath = "C:\test\" ExtendedProp = """text;HDR=NO""" With cn .Provider = "Microsoft.ACE.OLEDB.12.0;" .connectionstring = "Data Source=" & fullpath & ";Extended Properties=" & ExtendedProp .CursorLocation = adUseClient .Open End With query = "SELECT * FROM [COTPMS1_20220701.txt_01072022_01h15m20s.csv]" rsT.Open query, cn, adOpenForwardOnly, adLockReadOnly, adCmdText rsT.Close cn.Close Set rsT = Nothing Set cn = Nothing End Sub
解决方法
报错核心原因是ACE OLEDB文本驱动默认将方括号内最后一个半角点识别为文件名与扩展名的分隔标记,文件名中额外的点会导致驱动截断文件名,无法匹配到目标文件。无需修改原文件名、无需移动文件位置,只需要修改SQL语句的表名写法:在方括号包裹的完整文件名末尾,额外追加1个半角点号即可。驱动解析时会自动忽略末尾多余的点,正确识别完整文件名。
修正后的query赋值语句如下:
query = "SELECT * FROM [COTPMS1_20220701.txt_01072022_01h15m20s.csv.]"
补充注意事项:
- 如果运行时提示
adUseClient等常量未定义,说明VBA工程未引用ADO类型库,直接将对应常量替换为固定数值即可:adUseClient=3、adOpenForwardOnly=0、adLockReadOnly=1、adCmdText=1 - 连接串的Extended Properties建议增加
IMEX=1参数,避免混合数据类型的列出现读取异常,对应ExtendedProp可修改为:ExtendedProp = """text;HDR=NO;IMEX=1"""
内容的提问来源于stack exchange,提问作者quicksilv86
相关产品推荐
相关产品推荐

