Access导出CSV时字段名中的#被替换为句号该如何处理
解决Access 2013导出CSV时#被自动替换为句号的方案
DoCmd.TransferText的特殊字符替换是Access内置规则,无法通过参数直接关闭,以下是两种可行的解决方法:
方案1:使用自定义VBA导出逻辑(完全避免替换)
自己构造CSV内容写入文件,可以完全保留原始字段名,不受系统自动替换规则限制:
Sub CustomExportCSV() Dim rs As DAO.Recordset Dim fso As Object, ts As Object Dim strPath As String Dim i As Integer Dim fieldVal As String ' 输出路径和原逻辑保持一致 strPath = Application.CurrentProject.Path & "\Test.csv" Set fso = CreateObject("Scripting.FileSystemObject") ' 第三个参数设为False代表用ASCII编码,需要其他编码可自行调整 Set ts = fso.CreateTextFile(strPath, True, False) ' 打开目标数据表 Set rs = CurrentDb.OpenRecordset("Customer_Info", dbOpenSnapshot) ' 写入表头,完全保留原始字段名 For i = 0 To rs.Fields.Count - 1 If i > 0 Then ts.Write "," ' 字段名含逗号的话会自动用引号包裹,符合CSV规范 ts.Write """" & rs.Fields(i).Name & """" Next ts.Write vbCrLf ' 写入表内数据 Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 If i > 0 Then ts.Write "," fieldVal = Nz(rs.Fields(i).Value, "") ' 转义内容里的双引号,避免格式错乱 fieldVal = Replace(fieldVal, """", """""") ts.Write """" & fieldVal & """" Next ts.Write vbCrLf rs.MoveNext Loop ' 释放资源 rs.Close ts.Close Set rs = Nothing Set ts = Nothing Set fso = Nothing End Sub
方案2:保留原有导出逻辑,导出后修正表头
如果不想改动现有导出流程,可以在执行完TransferText之后,仅替换CSV第一行的表头字符:
Sub ExportAndFixHeader() Dim strPath As String Dim fso As Object, ts As Object Dim content As String, firstLine As String strPath = Application.CurrentProject.Path & "\Test.csv" ' 原有导出逻辑不变 DoCmd.TransferText acExportDelim, , "Customer_Info", strPath, True ' 修正表头 Set fso = CreateObject("Scripting.FileSystemObject") content = fso.OpenTextFile(strPath, 1).ReadAll ' 拆分表头和数据内容 firstLine = Split(content, vbCrLf)(0) ' 把表头里被替换的.改回#,可根据实际需求做精准替换 firstLine = Replace(firstLine, ".", "#") ' 拼接内容并写回文件 content = firstLine & vbCrLf & Mid(content, InStr(content, vbCrLf) + 2) Set ts = fso.CreateTextFile(strPath, True) ts.Write content ts.Close Set ts = Nothing Set fso = Nothing End Sub
注意事项
- 如果你的字段名本身就包含合法的英文句号,不要直接全局替换表头所有句号,建议针对已知被替换的字段做精准替换,例如
firstLine = Replace(firstLine, "Name.1", "Name#1"),避免误修改。 - 自定义导出代码默认给所有字段内容加了双引号包裹,符合CSV标准规范,也能避免内容里的逗号导致列错位。
内容的提问来源于stack exchange,提问作者sgtaz
相关产品推荐
相关产品推荐

