我有一个要求,在6000 CSV文件整理成一个CSV文件。 当前VBA过程是:1.打开个人CSV数据文件基于3.关闭个别CSV文件4.流程阵列的行数文件,以阵列的2.加载内容
为了提高代码和处理的效率,我希望有可能是从所述个体的CSV文件数据加载到阵列时不开口的方法和关闭每一个文件。
我使用Excel 2011的Mac。
我有一个要求,在6000 CSV文件整理成一个CSV文件。 当前VBA过程是:1.打开个人CSV数据文件基于3.关闭个别CSV文件4.流程阵列的行数文件,以阵列的2.加载内容
为了提高代码和处理的效率,我希望有可能是从所述个体的CSV文件数据加载到阵列时不开口的方法和关闭每一个文件。
我使用Excel 2011的Mac。
好吧,我假设所有的6000个文件具有相同的格式。
我的测试条件
我跑到下面的代码和代码只花了4秒。
Option Explicit
Sub Sample()
Dim strFolder As String, strFile As String
Dim MyData As String, strData() As String
Dim FinalArray() As String
Dim StartTime As String, endTime As String
Dim n As Long, j As Long, i As Long
strFolder = "C:\Temp\"
strFile = Dir(strFolder & "*.csv")
n = 0
StartTime = Now
Do While strFile <> ""
Open strFolder & strFile For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
ReDim Preserve FinalArray(j + UBound(strData) + 1)
j = UBound(FinalArray)
For i = LBound(strData) To UBound(strData)
FinalArray(n) = strData(i)
n = n + 1
Next i
strFile = Dir
Loop
endTime = Now
Debug.Print "Process started at : " & StartTime
Debug.Print "Process ended at : " & endTime
Debug.Print UBound(FinalArray)
End Sub
该文件夹的截图
编码输出的屏幕截图
UPDATE
确定我在MAC测试它
我的测试条件
我跑到下面的代码和代码只用了不到1秒(因为当时只有1024文件)。 因此,我期待它的情况下,4秒再次运行有6K文件
Sub Sample()
Dim strFile As String
Dim MyData As String, strData() As String
Dim FinalArray() As String
Dim StartTime As String, endTime As String
Dim n As Long, j As Long, i As Long
StartTime = Now
MyDir = ActiveWorkbook.Path
strPath = MyDir & ":"
strFile = Dir(strPath, MacID("TEXT"))
'Loop through each file in the folder
Do While Len(strFile) > 0
If Right(strFile, 3) = "csv" Then
Open strFile For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
ReDim Preserve FinalArray(j + UBound(strData) + 1)
j = UBound(FinalArray)
For i = LBound(strData) To UBound(strData)
FinalArray(n) = strData(i)
n = n + 1
Next i
strFile = Dir
End If
strFile = Dir
Loop
endTime = Now
Debug.Print "Process started at : " & StartTime
Debug.Print "Process ended at : " & endTime
Debug.Print UBound(FinalArray)
End Sub
该文件夹的截图
编码输出的屏幕截图
你并不需要使用Excel来做到这一点,你可以使用Windows从通过输入命令提示符下副本的合并:
copy *.csv mergedfilename.csv
这里没有一个Excel回答你的问题,在我看来 - 这当然不是正常定义其内,无论如何。
解决这个问题的正确方法是使用一种编程语言,是适当的任务; Perl中,例如,甚至命令外壳,结合文件。 Excel中不恒定文件进行I / O,但Perl是在处理大量文件的相当不错。 我执行一个类似的项目相对较小的Unix服务器上(合并数百万个文件),在几分钟内。
您还可以使用命令shell猫的文件一起(猫=串连),如nneonneo的意见建议; 我不能说这是更快。 Perl中肯定会需要更长的时间代码,特别是如果你必须先学Perl(虽然有很多的例子在净)。