You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:36:26