设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 13170|回复: 33
打印 上一主题 下一主题

[表] 再谈批量导入CSV文件

[复制链接]
跳转到指定楼层
1#
发表于 2013-4-7 15:29:18 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我在论坛里找到Grant版主的一篇例子,非常好.美中不足是在我的导入文件夹里有两类文件,都是CVS文件,但列数不同,两类文件在文件名上有区分,一个是以"N"结尾,一个是以"Y"结尾.
我的思路是:1.窗体1中列表框List1中的文件,默认值是全部导入同一个表(我再用查询将两类文件分开),不需要的文件人工点击取消.目前的问题是由于两类文件列数不同无法同时导入一个表.因为我的文件数量比较多,如果人工分两次导入不太方便.
2.如果不能将两类文件一次导入一个表内,能否根据文件名,将两类文件分别导入相应的表内.
请高手指点,谢谢!

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2013-4-8 07:28:56 | 显示全部楼层
roych 发表于 2013-4-8 00:45
为什么不考虑把这两类文件分成两个文件夹,然后再选择不同的表来分别导入呢?批量的意思,往往是需要有些共 ...

目我使用的是一个软件,它默认导出这两类文件在它的程序文件夹内,所以这两类文件是混在一个文件夹内,如果人工分到两个文件夹,因为文件数量较大,分拣起来比较麻烦
3#
 楼主| 发表于 2013-4-8 07:46:34 | 显示全部楼层
这两类文件被默认导入到一个文件夹内,如果人工将它们分拣到两个文件夹内,因为文件数量较多,所以比较麻烦。能否在导入时,在文件名上做个筛选,分开导入到数据库的两个表里也行。
4#
 楼主| 发表于 2013-4-8 10:34:44 | 显示全部楼层
为什么我的回复上不去
5#
 楼主| 发表于 2013-4-8 10:37:21 | 显示全部楼层
因为我使用的软件导出的CSV文件,默认导入在程序所在的文件夹,并且两类文件混在同一个文件夹,如果人工分拣到两个文件夹,因为CVS文件数量较大,所以比较困难。
6#
 楼主| 发表于 2013-4-8 22:25:18 | 显示全部楼层
为什么没人帮我,我尝试设两个按钮分别对应两个表,可以将两个类型的表分别导入两个表内,但窗体1中列表框List1中显示的是所有文件,必须在列表框List1中选择,比较麻烦。列表框List1中能不能分别显示以"N"结尾,和以"Y"结尾的文件.
7#
 楼主| 发表于 2013-4-9 07:27:34 | 显示全部楼层
谢谢!,期待您的回复!
8#
 楼主| 发表于 2013-4-11 23:06:32 | 显示全部楼层
本帖最后由 123shusheng 于 2013-4-11 23:08 编辑

您的例子经过测试,我的两个表1个是10列,一个是13列,我将模块内n=13,提示运行时错误“3265”,在对应所需名称或序数的集合中,未找到项目。
另外,实现一个按钮,一张表导入后,能否默认将文件夹内所有CSV文件全部导入,不用的文件我人工消除,谢谢!
  If InStr(1, strFileName, "n") > 0 Then
     n = 13
   Else
     n = 13
   End If
   Set connA = CurrentProject.Connection
    conn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
              "DBQ=" & strFilePath & ";Extensions=asc,csv,tab,txtersist Security Info=False"   '打开数据链接关键
    With rs
        .CursorType = 2
        .LockType = 3
        .CursorLocation = 3
        .ActiveConnection = connA
    End With

    sqlcsv = "SELECT * FROM [TEXT;FMT=CSV;DELIMITED;HDR=YES;DATABASE=" & strFilePath & "].[" & strFileName & "]"
    Debug.Print sqlcsv
    rs.Open sqlcsv, connA
    rs.Move (0)         '移动到指定记录
    sql = "Select * From tbl_Export"
    rs1.Open sql, connA, 1, 3
    Do Until rs.EOF
        rs1.AddNew
        For i = 0 To n
            rs1.Fields(i + 0) = rs.Fields(i)
            'rs1(i + 1) = rs(i)
        Next
        rs.MoveNext
    Loop
    rs1.UpdateBatch
    rs1.Close
    rs.Close
    conn.Close
    Set rs = Nothing
    Set rs1 = Nothing
    Set conn = Nothing
End Function
9#
 楼主| 发表于 2013-4-12 15:45:18 | 显示全部楼层
本帖最后由 123shusheng 于 2013-4-12 15:49 编辑
aslxt 发表于 2013-4-12 10:40
If InStr(1, strFileName, "n") > 0 Then
     n = 13
   Else


感谢您的回复,太详细了,每条语句都有解释,收益匪浅,再次向您表示感谢!
按照您的指点,我的数据库也改好了,非常满意!
我默认是导入待导入数据文件夹里的所有CSV文件,现在需要在CSV窗体List1列表框内一个一个的选择文件,因为文件数量比较多,所以有点麻烦。但我发现其实按Shift键同时点击List1列表框内的最后一个文件,也可以做到全选,但是还是存在人差错,造成有文件没有导入,所以有点美中不足。
所以我想能否CSV窗体中List1列表框内默认是全部选中状态,有个别不需要的文件我在List1列表框内点击它,可以成为不选中状态(同List1列表框目前状态正好相反),然后点击导入按钮,导入我需要导入的CSV文件。
10#
 楼主| 发表于 2013-4-12 22:27:23 | 显示全部楼层
太棒了,测试成功。我的问题在高手眼里,简直是张飞吃豆芽——小菜一碟。谢谢!
我在使用中还有一个问题,例子中的待导入数据和已导入数据两个文件夹,默认是在程序所在的文件夹内,实际使用不太方便,如何指定位置;如:  d:\程序\待导入数据; d:\程序\已导入数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-6 05:38 , Processed in 0.105227 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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