如何查找目录中所有.csv文件的长度



我有多个.csv文件,我需要在我的目录中找到它的长度。(包含数据的行数。我正在从同一目录中的.xlsx文件运行以下代码。(我打算最终将数据从.csv文件复制到.xlsx文件。

i = 1
FilePath = Application.ActiveWorkbook.Path & ""
file = Dir(FilePath & "*.csv")
Do While Len(file) > 0
    Open FilePath & file For Input As #1
        length(i) = Cells(Rows.Count, 1).End(xlUp).Row 
        i = i + 1
    Close #1
    file = Dir
Loop

长度数组的所有值最终都是 1,即使 .csv 文件的长度可能为 15-20 行。

您实际上并没有在 Excel 中打开文件,因此您无法计算有多少单元格。尝试阅读多少行:

Open FilePath & file For Input As #1
    While Not EOF(1): Line Input #1, trashLine: Wend
    i = i + 1
Close #1

或者,在 Excel 中打开文件 - 测试 - 然后关闭:

Set tempWB = Workbooks.Open(FilePath & file)
    i = i + tempWB.Sheets(1).Cells(tempWB.Sheets(1).Rows.Count, 1).End(xlUp).Row
tempWB.Close False

或者更快的方法是使用Windows脚本:

 Dim i As Long
 For Each varFile In _
    Filter(Split(CreateObject("WScript.Shell").Exec("cmd /c find /v /c """" """ _
    & ThisWorkbook.Path & "*.csv""").StdOut.ReadAll, vbCrLf), ":")
    i = i + CLng(Split(varFile, ":")(2))
 Next
 Debug.Print i
这样,如果您有 10 个文件,

代码只处理 10 个字符串,而不是打开/关闭文件或读取数千行......

@SOofWXLS所述,您的代码不是在Excel中打开文件,而是打开它们以进行直接I/O。

这是一个完整的代码示例,它将像您尝试的那样用文件长度填充您的数组。

Dim fPath As String
Dim fName As String
Dim hFile As Long
Dim i As Long
Dim NumLines As Long
Dim length() As Long
Dim strLine As String
ReDim length(1 To 1)
fPath = Application.ActiveWorkbook.Path & ""
fName = Dir(fPath & "*.csv")
Do While Len(fName) > 0
    i = i + 1
    NumLines = 0
    ReDim Preserve length(1 To i)
    hFile = FreeFile
    Open fPath & fName For Input As hFile
    Do While Not EOF(hFile)
        Line Input #hFile, strLine
        NumLines = NumLines + 1
    Loop
    Close hFile
    length(i) = NumLines
    fName = Dir
Loop

这还将动态扩展阵列,以容纳找到的任意数量的文件。

相关内容

  • 没有找到相关文章