java csv导入读取路径_正确循环目录中的子文件夹并从.CSV文件导入指定的列

我试图弄清楚如何循环通过特定目录的子文件夹并从.CSV文件导入指定的列 .

目前我有一个编码解决方案,不包括通过子文件夹循环 .

相反,它在三个单独的列中包含带有文件路径,文件目标和列号的工作表,但子文件夹是动态的 . 它们的名称和数量都在变化 .

这是文件路径表:

baf2350a-2239-4fef-a5de-ebae187dd745.jpg

这是我的代码:

Dim DL As Worksheet

Dim DFI As Worksheet

Set DL = ThisWorkbook.Sheets("DataList")

Set DFI = ThisWorkbook.Sheets("DataFeedInput")

DL.Rows("$3:$202").ClearContents

With DL.QueryTables.Add(Connection:="TEXT;C:\Users\Betty\AppData\Roaming\MetaQuotes\Terminal\B4D9BCD10BE9B5248AFCB2BE2411BA10\MQL4\Files\Hist_#Corn_1440.csv", Destination:=Range("$A$3"))

.Name = "Hist_#Corn_1441"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 866

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = True

.TextFileSpaceDelimiter = False

.TextFileColumnDataTypes = Array(9, 1, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False

End With

Dim i As Integer

For i = 4 To 642

Dim FileName As String

Dim OutputSheet As String

Dim ColNumber As String

FileName = DFI.Range("B" & i).Value

OutputSheet = DFI.Range("C" & i).Value

ColNumber = DFI.Range("D" & i).Value

With DL.QueryTables.Add(Connection:="TEXT;" & FileName, Destination:=DL.Range(ColNumber & "3"))

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 866

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = True

.TextFileSpaceDelimiter = False

.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=True

End With

Next i

DL.Cells.EntireColumn.AutoFit

这种方法的问题是,如果没有从外部源下载.CSV文件,而不是它不存在,我得到一个错误,说明文件丢失并关闭整个代码运行到最后 .

另一个问题是这种方法需要几十年才能完成任务 .

我正在寻找一个不依赖于文件路径表的不同解决方案,循环通过子文件夹,并从.CSV文件中仅提取第6列 .

43d4f085-acc3-4940-98c4-450531431089.jpg

在每个文件夹中我都有1个.CSV文件:

90979673-4c2a-41e9-ab78-a5976896f3c6.jpg

我需要循环遍历每个并创建与Excel工作表的连接,同时仅从.CSV导入第6列 .

我有什么想法可以解决这个问题吗?

Edit 1:

这是子文件夹的文件路径:

C:\ Users \用户贝蒂\应用程序数据\漫游\迈达克\终端\ B4D9BCD10BE9B5248AFCB2BE2411BA10 \ MQL4 \文件\ Export_History

End of Edit 1:

Edit 2:

到目前为止,我在@Jeeped的帮助下学到的是,我可以使用 FileSystemObject 循环访问文件夹,可能会进入每个文件夹并从.CSV导入第6列 .

我很难进入如何通过文件夹和.CSV导入合并循环,所以如果你能给我一个大纲程序,我想我可以把它放在一起并添加为如果需要,请编辑此问题 .

End of Edit 2:

Edit 3:

我所重视的是,我可以使用这样的东西来完成任务:

Sub GetSubFolders()

Dim fso As New FileSystemObject

Dim f As Folder, sf As Folder

Set f = fso.GetFolder("file path")

For Each sf In f.SubFolders

'Use a loop to import only column 6 from every .CSV file in sub folders

Next

End Sub

End Of Edit 3

那么您认为它会起作用么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值