如何使用VBA打开.csv文件并读取所有数据?

时间:2017-12-14 20:15:02

标签: vba excel-vba csv excel

当我将这个软件中的数据提取到原始文本时,它会用大部分文件的逗号和引号分隔值。除非在某些情况下数据有换行符。当我将其保存为.csv并打开它时,数据被完全格式化为适当的表格。 但是,如果我使用QueryTables尝试相同的过程,则会将输入字符作为新行处理。

我在两个不同的子程序中有两种不同的方法 第一个是能够正确读取行数和列数,但由于它使用QueryTables方法,因此它会将charachter作为新行输入。 这种方法的代码如下:

Private Sub OpenCSVFile()
With ThisWorkbook
        Set primeSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        primeSheet.Name = "Temp"
End With
Set informationRange = primeSheet.Range("A1")
xAddress = informationRange.Address
With primeSheet.QueryTables.Add("TEXT;" & strPath, primeSheet.Range(xAddress))
    .AdjustColumnWidth = False
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells 
    .SaveData = False
    .RefreshPeriod = 0
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

rowLength = primeSheet.Cells(1, Columns.Count).End(xlToLeft).Column
colLength = primeSheet.Cells(Rows.Count, "A").End(xlUp).Row
End Sub

另一种方法保持格式不变,以便我定期打开我提取的数据的.csv文件,但它无法读取行数和长度,并为每个返回1的值。

 Private Sub OpenCSV()
 Set primeBook = Workbooks.Open(strPath)
 With primeBook
     rowLength = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
     colLength = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
End With
Set informationRange = Sheet1.Range("A1", Sheet1.Cells(colLength, rowLength))
End Sub

您如何建议我解决我的问题并阅读csv文件的内容,同时确保没有奇怪的换行符。

1 个答案:

答案 0 :(得分:0)

这会有用吗?

Private Sub OpenCSV()
 Set primeBook = Workbooks.Open(strPath)
 With primeBook.Sheet1
     rowLength = .usedrange.rows.count
     colLength = .usedrange.columns.count
End With
Set informationRange = Sheet1.Range("A1", Sheet1.Cells(colLength, rowLength))
End Sub