如何将TXT文件以文本类型导入Microsoft Access而非数值类型
解决Access导入固定长度TXT时自动识别为数值的问题
针对你遇到的固定长度TXT导入时被误识别为数值的问题,提供三个可靠的自动化解决方案:
方案1:用Schema.ini强制字段类型
Access的Jet驱动会根据文件前几行自动判断字段类型,通过Schema.ini可以强制指定文本类型,彻底规避自动识别错误:
- 在
sourcefile.txt的同目录下创建Schema.ini文件,写入以下内容:
[sourcefile.txt] ColNameHeader=False Format=FixedLength Col1=swd Text Width 32
- 用VBA执行导入:
DoCmd.TransferText acImportFixed, , "T_RAW_SWD", "C:\你的文件路径\sourcefile.txt", False
Schema.ini会明确告诉驱动:该文件为固定长度格式,唯一列swd是长度32的文本类型,不会再触发数值识别逻辑。
方案2:复用手动导入规格
既然手动向导能成功,直接保存导入规格并在VBA中调用:
- 打开Access导入向导,选择
sourcefile.txt,设置为固定长度格式,将唯一字段指定为文本类型(长度32),完成导入时选择「保存导入步骤」,记住规格名称(比如Fixed32TextSpec)。 - VBA调用该规格:
DoCmd.TransferText acImportFixed, "Fixed32TextSpec", "T_RAW_SWD", "C:\你的文件路径\sourcefile.txt", False
这种方法完全复用手动验证过的正确配置,避免驱动自动判断的不确定性。
方案3:VBA逐行读取写入表
如果前两种方法仍有问题,直接绕开Access的导入驱动,手动控制数据写入:
Sub ImportFixedLengthText() Dim fso As Object, txtFile As Object Dim lineText As String Dim db As DAO.Database, rs As DAO.Recordset Set fso = CreateObject("Scripting.FileSystemObject") Set txtFile = fso.OpenTextFile("C:\你的文件路径\sourcefile.txt", 1) '1=只读模式 Set db = CurrentDb Set rs = db.OpenRecordset("T_RAW_SWD", dbOpenDynaset) Do While Not txtFile.AtEndOfStream lineText = txtFile.ReadLine lineText = Left(lineText, 32) '确保截取固定32字符,过滤换行符干扰 rs.AddNew rs!swd = lineText rs.Update Loop '清理对象 rs.Close: txtFile.Close Set rs = Nothing: Set txtFile = Nothing: Set fso = Nothing: Set db = Nothing End Sub
这个方法直接读取每行文本并写入字段,完全控制数据类型,8万行数据的处理速度在Access中完全可接受。
内容的提问来源于stack exchange,提问作者Foxfire And Burns And Burns
相关产品推荐
相关产品推荐

