设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3151|回复: 2
打印 上一主题 下一主题

[ADO/DAO] 【请教】批量不规则csv文件如何导入至ACCESS

[复制链接]
跳转到指定楼层
1#
发表于 2015-12-24 22:33:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家晚上好。
如题,我有大量的不规则csv文件(多个表头,且不在同一行)
请问:应该如何导入至ACCESS中?

导入的格式,放置在EXCEL文件"汇总”中了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2015-12-25 10:06:18 | 只看该作者
找到这里来了?
身为斑竹,我还是做点什么吧。
1、新建2个表,关系为一对多。具体字段设置见附件。
2、按下Alt+F11进入VBE界面,点击“工具\引用”,再下拉列表中找到并勾选以下库:
Microsoft ActiveX Data Object 2.8 Library(建议使用稍微高一点的版本)
Microsoft Scripting Runtime
3、点击插入\模块,贴上以下代码:
  1. Sub importData()
  2.     '定义文件系统组件
  3.     Dim fso As New FileSystemObject
  4.     Dim fd As Folder
  5.     Dim fl As File
  6.     Dim txt As TextStream
  7.     '定义数组,用于存储csv的两个表的数据。
  8.     Dim Data1, Data2
  9.     '定义变量,用于判断2个表的字段个数。
  10.     Dim i As Long, j As Long
  11.     '定义记录集
  12.     Dim rst As New ADODB.Recordset
  13.     Dim lngJudgeID As Long
  14.     Set fd = fso.GetFolder(CurrentProject.Path)
  15.     For Each fl In fd.Files
  16.         '只读取csv文件
  17.         If Right(fl.Name, 3) = "csv" Then
  18.             '打开文本流
  19.             Set txt = fso.OpenTextFile(fl.Name)
  20.             '跳过第一行
  21.             txt.SkipLine
  22.             '读取第二行,分解为数组
  23.             Data1 = Split(txt.ReadLine, ",")
  24.             
  25.             '打开记录集,新增一行——————这里假定每个csv文件,第一个表只有1行。如有多行,
  26.             rst.Open "tblJudgeAll", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  27.             rst.AddNew
  28.             For i = LBound(Data1) To UBound(Data1)
  29.                 rst(i + 1) = Data1(i)
  30.             Next
  31.             rst.Update
  32.             lngJudgeID = rst(0)
  33.             rst.Close
  34.             '初始化
  35.             
  36.             '跳过3行
  37.             txt.SkipLine
  38.             txt.SkipLine
  39.             txt.SkipLine
  40.             '读取剩余的行数
  41.             rst.Open "tblJudgeDetail", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  42.             Do Until txt.AtEndOfLine
  43.                 Data2 = Split(txt.ReadLine, ",")
  44.                 rst.AddNew
  45.                 rst(1) = lngJudgeID
  46.                     For j = LBound(Data2) To UBound(Data2)
  47.                         rst(j + 2) = Data2(j)
  48.                     Next
  49.                 rst.Update
  50.             Loop
  51.             rst.Close
  52.         End If
  53.     Next
  54. End Sub
复制代码

4、按F5运行即可完成导入操作。
5、顺便说一下,Excel表可以按你的原文件那样来建表,但Access应该通过一对多关系建立起平面化数据,我给的附件就是一个标准范例。
6、这里通过JudgeID来建立关系,如果有其它主键(例如Jig_ID什么的),可以用其它主键,但我对你的业务不熟悉,所以用这个了。
7、字段中,原有字段名中的特殊字符已经被清除,例如,点号、斜杠等,这样比较方便后期建立查询或者写SQL语句等等。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2015-12-25 17:26:33 | 只看该作者
老师厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-5 18:04 , Processed in 0.112767 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表