Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 18771|回复: 11

拆分大数据量csv文件

[复制链接]
发表于 2013-2-7 15:18 | 显示全部楼层 |阅读模式
我想要把一个大数据量的csv文件拆分成若干的小的csv文件.
例如:
a.csv   520万行数据.

我想把[a.csv]这个csv文件拆分成6个小的csv文件,前5个都是100万行数据,最后一个20万行数据.

用vba程序做,有什么好的方法么?

要求速度,不能太慢~~~

各位大侠有知道的么?帮帮忙!!谢谢大家了!!提前祝愿大家春节快乐!!呵呵
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-2-7 15:46 | 显示全部楼层
最快就是用数组的方法,一切数据处理在内存中进行。
回复

使用道具 举报

 楼主| 发表于 2013-2-7 16:19 | 显示全部楼层
数组的方法是不是太慢了~~譬如说csv文件有20列~~就会存储500万*20个数据~~csv能不能成块的复制内容然后粘贴过去呢?有没有这样的方法??大侠们,有谁明白这个地方~~指导一下啊!!!
回复

使用道具 举报

发表于 2013-2-7 16:21 | 显示全部楼层
liyancity 发表于 2013-2-7 16:19
数组的方法是不是太慢了~~譬如说csv文件有20列~~就会存储500万*20个数据~~csv能不能成块的复制内容然后粘贴 ...

数组的方法是最快的,复制粘贴要慢的很多。
回复

使用道具 举报

 楼主| 发表于 2013-2-7 16:29 | 显示全部楼层
那么的帅~~谢谢你的提醒~~能麻烦提示一下怎么做么?给一段source,我是新手~~怎么打开csv文件都不清楚~~谢谢了!!!
回复

使用道具 举报

 楼主| 发表于 2013-2-7 16:41 | 显示全部楼层
那么的帅 发表于 2013-2-7 16:21
数组的方法是最快的,复制粘贴要慢的很多。

那么的帅~~谢谢你的提醒~~能麻烦提示一下怎么做么?给一段source,我是新手~~怎么打开csv文件都不清楚~~谢谢了!!!
回复

使用道具 举报

发表于 2013-2-7 18:04 | 显示全部楼层
本帖最后由 上清宫主 于 2013-2-7 18:39 编辑

520万行数据??真会想!
excel2010一张表最多有多少行?
变通一下吧,别想excel

试试这个看成不 csv文件拆分工具.rar (529.85 KB, 下载次数: 541)
回复

使用道具 举报

 楼主| 发表于 2013-2-8 13:07 | 显示全部楼层
上清宫主 发表于 2013-2-7 18:04
520万行数据??真会想!
excel2010一张表最多有多少行?
变通一下吧,别想excel

谢谢~~,我不是找工具,我是要用vba程序来实现这个功能。
一个excel2007好像最多有100多万行,不到120万行,所以才要把csv文件拆分成5个100万行的csv文件,然后再导入到excel模板里面。有谁知道有什么好方法来拆分csv文件阿~~谢谢了!!!
回复

使用道具 举报

发表于 2013-2-8 16:52 | 显示全部楼层
服了
写个蜗牛,43万行折成1万行一个的,要50秒左右
Sub csv拆分多个文件1()
t = Timer
Dim cnn As Object
Set cnn = CreateObject("adodb.connection")
Dim rst As New ADODB.Recordset
MyPath = "d:\tmp\"
cnn.Open "rovider=Microsoft.Ace.OLEDB.12.0;Extended Properties='text;FMT=DELIMITED';Data Source=" & MyPath
SQL$ = "select *  from test.csv"
rst.Open SQL, cnn, 1, 1
For i = 0 To rst.Fields.Count - 1
        s = s & "," & rst.Fields(i).Name
Next
Open MyPath & "test0.csv" For Output As #1
Print #1, Mid(s, 2)
r& = 1
f% = 0
Do While r <= rst.RecordCount
   stmp = ""
   For j% = 0 To rst.Fields.Count - 1
            stmp = stmp & "," & rst.Fields(j).Value
   Next
   rst.MoveNext
   Print #1, Mid(stmp, 2)
   If r Mod 10000 = 0 Then
      Close #1
      f = f + 1
      Open MyPath & "test" & f & ".csv" For Output As #1
      Print #1, Mid(s, 2)
   End If
   r = r + 1
Loop
If Len(stmp) Then Print #1, Mid(stmp, 2)
Close #1
cnn.Close
Set cnn = Nothing
[a2] = Timer - t
End Sub
回复

使用道具 举报

发表于 2013-2-9 16:42 | 显示全部楼层
学习了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 03:52 , Processed in 0.323794 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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