Office中国论坛/Access中国论坛
标题:
【请教】批量不规则csv文件如何导入至ACCESS
[打印本页]
作者:
pdmaik
时间:
2015-12-24 22:33
标题:
【请教】批量不规则csv文件如何导入至ACCESS
大家晚上好。
如题,我有大量的不规则csv文件(多个表头,且不在同一行)
请问:应该如何导入至ACCESS中?
导入的格式,放置在EXCEL文件"汇总”中了。
作者:
roych
时间:
2015-12-25 10:06
找到这里来了?
身为斑竹,我还是做点什么吧。
1、新建2个表,关系为一对多。具体字段设置见附件。
2、按下Alt+F11进入VBE界面,点击“工具\引用”,再下拉列表中找到并勾选以下库:
Microsoft ActiveX Data Object 2.8 Library(建议使用稍微高一点的版本)
Microsoft Scripting Runtime
3、点击插入\模块,贴上以下代码:
Sub importData()
'定义文件系统组件
Dim fso As New FileSystemObject
Dim fd As Folder
Dim fl As File
Dim txt As TextStream
'定义数组,用于存储csv的两个表的数据。
Dim Data1, Data2
'定义变量,用于判断2个表的字段个数。
Dim i As Long, j As Long
'定义记录集
Dim rst As New ADODB.Recordset
Dim lngJudgeID As Long
Set fd = fso.GetFolder(CurrentProject.Path)
For Each fl In fd.Files
'只读取csv文件
If Right(fl.Name, 3) = "csv" Then
'打开文本流
Set txt = fso.OpenTextFile(fl.Name)
'跳过第一行
txt.SkipLine
'读取第二行,分解为数组
Data1 = Split(txt.ReadLine, ",")
'打开记录集,新增一行——————这里假定每个csv文件,第一个表只有1行。如有多行,
rst.Open "tblJudgeAll", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rst.AddNew
For i = LBound(Data1) To UBound(Data1)
rst(i + 1) = Data1(i)
Next
rst.Update
lngJudgeID = rst(0)
rst.Close
'初始化
'跳过3行
txt.SkipLine
txt.SkipLine
txt.SkipLine
'读取剩余的行数
rst.Open "tblJudgeDetail", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until txt.AtEndOfLine
Data2 = Split(txt.ReadLine, ",")
rst.AddNew
rst(1) = lngJudgeID
For j = LBound(Data2) To UBound(Data2)
rst(j + 2) = Data2(j)
Next
rst.Update
Loop
rst.Close
End If
Next
End Sub
复制代码
4、按F5运行即可完成导入操作。
5、顺便说一下,Excel表可以按你的原文件那样来建表,但Access应该通过一对多关系建立起平面化数据,我给的附件就是一个标准范例。
6、这里通过JudgeID来建立关系,如果有其它主键(例如Jig_ID什么的),可以用其它主键,但我对你的业务不熟悉,所以用这个了。[attach]57721[/attach]
7、字段中,原有字段名中的特殊字符已经被清除,例如,点号、斜杠等,这样比较方便后期建立查询或者写SQL语句等等。
作者:
xiaowuo2
时间:
2015-12-25 17:26
老师厉害
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3