我有大约5000个.csv文件,我想在每个文件中搜索一行并将其解压缩。我已经粘贴了下面代码的关键部分,但是由于我必须打开和关闭每个.csv文件,因此5000个文件的进程很慢。有没有办法在不打开它的情况下读取csv文件?我曾考虑过编写一个小脚本来首先将每个csv文件转换为Excel? THX。
SP_File_Name = Dir(DN_Path & "*.*")
Count = 1
Set START_CELL_RANGE = TARGET_SP_SHEET.Range("B3")
Set TICKER_CODE_RANGE = TARGET_SP_SHEET.Range("B1")
While (SP_File_Name <> "")
SP_Full_Path = DN_Path & SP_File_Name
Workbooks.OpenText Filename:=SP_Full_Path, DataType:=xlDelimited, comma:=True, Local:=True
Set INPUT_WORKBOOK = ActiveWorkbook
Set INPUT_SHEET = INPUT_WORKBOOK.Worksheets(1)
INPUT_SHEET.Range("$A$1").Select
Set INPUT_RANGE = ActiveCell.CurrentRegion
Set INPUT_FIRST_MATCH_RANGE = INPUT_RANGE.Find(TICKER_CODE_RANGE)
If INPUT_FIRST_MATCH_RANGE Is Nothing Then
GoTo NOT_FOUND
End If
START_CELL = START_CELL_RANGE.Address
TARGET_SP_SHEET.Range(START_CELL_RANGE.Address, START_CELL_RANGE.Offset(0, 6).Address).Value = INPUT_SHEET.Range(INPUT_FIRST_MATCH_RANGE.Address, INPUT_FIRST_MATCH_RANGE.Offset(0, 7).Address).Value
' write diagnostics
Sheet5.Range("K" & Count + 4).Value = START_CELL
Sheet5.Range("L" & Count + 4).Value = "$A$1"
Sheet5.Range("M" & Count + 4).Value = INPUT_FIRST_MATCH_RANGE.Address
Sheet5.Range("N" & Count + 4).Value = INPUT_FIRST_MATCH_RANGE.Offset(0, 7).Address
NOT_FOUND:
Set START_CELL_RANGE = START_CELL_RANGE.Offset(1, 0)
Workbooks(SP_File_Name).Close SaveChanges:=False
SP_File_Name = Dir
Count = Count + 1
Wend
答案 0 :(得分:0)
要从VBA调用cmd
命令,我使用了WshShell。对于早期绑定,我设置了对Windows脚本宿主对象模型的引用
Shell
函数的一个问题是它以异步方式运行。通过使用WshShell Run方法,您可以等到完成后再执行后续命令。
示例代码可能如下所示:
Option Explicit
Sub foo()
Dim WSH As WshShell
Dim lErrCode As Long
Set WSH = New WshShell
lErrCode = WSH.Run("cmd /c findstr /C:""Power"" ""C:\Users\Ron\filelist.txt"" > ""C:\Users\Ron\Results2.txt""", 1, True)
If lErrCode <> 0 Then
MsgBox "Error Code: " & lErrCode
Stop
End If
Set WSH = Nothing
Call Shell
End Sub
关于您在评论中显示的命令,我将确保VBA正确地为cmd
提示解释字符串。看看你的代码行,我想知道你是否错过了搜索字符串和文件路径之间的空格。
答案 1 :(得分:0)
我不认为你可以在不打开文件的情况下阅读文件的内容。为什么不将所有5000个文件合并为1个单独的文件并将其读入Excel。当然会更快。使用命令窗口,将其指向包含所有5000个文件的文件夹,然后输入:
复制* .csv merge.csv
请参阅以下链接以获取示例。
http://analystcave.com/merge-csv-files-or-txt-files-in-a-folder/