Vba 使用VBScript从100多万个csv文件中检索值
我需要复制多个文件的值(比如一百万个csv文件)并将其粘贴到主文件中 附件是代码片段:-Vba 使用VBScript从100多万个csv文件中检索值,vba,csv,Vba,Csv,我需要复制多个文件的值(比如一百万个csv文件)并将其粘贴到主文件中 附件是代码片段:- Public Sub GetDataFromClosedBook() Dim Filename As String Dim wkb As Workbook Application.EnableEvents = False Application.ScreenUpdating = False Sheets("Meter-1").Visible = True Sheets("Meter-1").Select
Public Sub GetDataFromClosedBook()
Dim Filename As String
Dim wkb As Workbook
Application.EnableEvents = False
Application.ScreenUpdating = False
Sheets("Meter-1").Visible = True
Sheets("Meter-1").Select
mydata = "G:\BIS Dashboard(Finalised-13012016)\Files_Oct-21\"
Filename = Dir(mydata & "\AC PANEL-2_22_**************.csv", vbNormal)
Do Until Filename = ""
Workbooks.Open Filename:=mydata & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheets(1).Range("C8, E8").Copy ThisWorkbook.Sheets("Meter- 1").Range("A1048576").End(xlUp).Offset(1, 0)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
Sheets("Meter-1").Select
Sheets("Meter-1").Visible = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
如果csv文件少于1000个(比如说1000个csv文件),上面的代码运行得很好,并且可以检索值,但是无论我多么希望从所有文件中检索值
代码运行了一段时间,没有响应,最后excel在大约一个小时后崩溃
任何帮助都将不胜感激 首先,这毫无意义:
For Each Sheet In ActiveWorkbook.Sheets
Sheets(1).Range("C8, E8").Copy ThisWorkbook.Sheets("Meter- 1").Range("A1048576").End(xlUp).Offset(1, 0)
Next Sheet
您的目标似乎在当前书籍的所有工作表上循环,但是通过说sheets(1)。
它总是在第一个工作表上循环,因此您将得到重复的值。请填写表格。
然后,如果你真的有一百万个文件要处理,你应该彻底改变你的方法来限制在任何时候使用的内存
一些提示:
应用程序,您必须稍微重写代码。
,就像这样设置objExcel=CreateObject(“Excel.Application”)
Set objWorkbook=objExcel.Workbooks.Open(mydata和Filename)
,当您的复制工作完成后,在循环到下一个步骤之前,执行Set objWorkbook=Nothing
祝你好运,一百万?天哪!我不确定Excel或VBA或任何类似性质的东西是否能处理这项任务。您可以使用SQL server执行此作业吗?文件名中一定有某种模式…我当然希望如此。。。试试SQL server express,您可以使用下面的链接免费获得它
Do Until Filename = ""
On Error Resume Next
Set wkb = Workbooks.Open(mydata & Filename)
wkb.Sheets.Range("C8, E8").Copy ThisWorkbook.Sheets("Meter-1").Range("A1048576").End(xlUp).Offset(1, 0)
wkb.Close False
Filename = Dir()
Loop
然后,使用您可以使用的任何模式循环浏览CSV文件。在下面的脚本中,我每天都在更改日期。这只是一个例子。我肯定你没有1000000次约会,除非你是在测量恐龙行走时的数据。只需更改脚本以满足您的需要
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=10000)
BEGIN
PRINT @intFlag
declare @fullpath1 varchar(1000)
select @fullpath1 = '''\\FTP\your_path' + convert(varchar, getdate()- @intFlag , 112) + '_your_file.txt'''
declare @cmd1 nvarchar(1000)
select @cmd1 = 'bulk insert [dbo].[your_table] from ' + @fullpath1 + ' with (FIELDTERMINATOR = ''\t'', FIRSTROW = 2, ROWTERMINATOR=''0x0a'')'
exec (@cmd1)
SET @intFlag = @intFlag + 1
END
GO
DECLARE@intFlag INT
设置@intFlag=1
虽然(@intFlag试图通过自动化来实现这一点会带来麻烦,而且开销太大。它会循环所有工作表,但只使用工作表1,是否只有一张工作表,不需要循环,如果有多张工作表,则只使用工作表(1),没有任何东西使用工作表。您也可以查看ADO,使用它,但不说这肯定会解决问题,但值得一试……每个*.cvs需要复制多少行?每个*.cvs文件到底有多少*.cvs文件?每个csv文件中只有一个工作表。我只想从包含一个工作表的每个工作簿中复制两个单元格值。@SusiloT谢谢你的建议。是的,csv文件中只有一张工作表,我会根据你的建议进行更改。@Nathan_抱歉,代码中有一个小的编辑,我正在重新发布代码。@Thomas G谢谢你的建议,我会处理它,我会很快发布结果soon@ThomasG