VBA处理CSV导入Access数据类型问题及添加Dummy行咨询
解决CSV导入Access时的数据类型转换问题
方案一:强制Access按Short Text类型导入所有列
无需修改CSV文件,通过配置文件或VBA导入参数即可实现:
方法1:使用Schema.ini文件
在CSV文件所在目录下创建Schema.ini文本文件,内容示例(替换为你的实际文件名和列名):
[你的文件名.csv] ColNameHeader=True Format=Delimited(,) Col1=Col1 Text Col2=Col2 Text Col3=Col3 Text
ColNameHeader=True表示第一行为列标题ColX=列名 Text指定每列采用Text类型(对应Access的Short Text),完全覆盖Access的自动类型检测逻辑
方法2:VBA中直接指定导入参数
调用DoCmd.TransferText时,通过DataType参数明确指定所有列类型,示例代码:
DoCmd.TransferText _ TransferType:=acImportDelim, _ TableName:="你的目标表名", _ FileName:="C:\文件路径\你的文件名.csv", _ HasFieldNames:=True, _ DataType:="TEXT,TEXT,TEXT" ' 列数与CSV一致,每列对应一个TEXT
方案二:给CSV文件添加8行Dummy数据(VBA实现)
如果方案一不适用,可通过VBA直接修改CSV文件,在标题行后插入8行全为Dummy的内容:
Sub AddDummyRowsToCSV() Dim csvPath As String Dim tempPath As String Dim fileNum As Integer Dim lineText As String Dim i As Integer csvPath = "C:\文件路径\你的文件名.csv" ' 替换为你的CSV路径 tempPath = "C:\文件路径\临时文件.csv" ' 临时文件路径 ' 打开原文件与临时文件 fileNum = FreeFile() Open csvPath For Input As #fileNum Open tempPath For Output As #fileNum + 1 ' 写入标题行 Line Input #fileNum, lineText Print #fileNum + 1, lineText ' 写入8行Dummy数据(分隔符与CSV一致,此处为逗号) For i = 1 To 8 Print #fileNum + 1, "Dummy,Dummy,Dummy" Next i ' 写入原文件剩余内容 Do While Not EOF(fileNum) Line Input #fileNum, lineText Print #fileNum + 1, lineText Loop ' 关闭文件并替换原文件 Close #fileNum Close #fileNum + 1 Kill csvPath Name tempPath As csvPath End Sub
注意:
- 若CSV使用制表符等其他分隔符,需将
"Dummy,Dummy,Dummy"替换为对应格式(如"Dummy" & vbTab & "Dummy" & vbTab & "Dummy") - 运行前请备份原CSV文件,避免数据丢失
内容的提问来源于stack exchange,提问作者Роман Рослый
相关产品推荐
相关产品推荐

