用分号分隔符打开CSV文件

时间:2019-03-29 15:38:31

标签: excel vba csv

我有一个简单的宏,需要使用分号定界符打开.csv文件,但是,当我运行代码时,所有数据都位于第一列中,字符串中带有;,但没有定界。

我为workbooks.open方法尝试了其他可选设置。下面,我介绍了我的最新尝试。 我的区域设置是英语(英国),其中,是数字分组分隔符,而.是十进制分隔符。

到目前为止,我的代码:

Sub OpenCSV()

Dim FilePath as String
Dim LikeFile as String

FilePath = " C:\" ' Name of file path to fetch data from
LikeFile = Dir(FilePath & "*.csv")    ' Finding file 
        If LikeFile <> "" Then
            Workbooks.Open Filename:=FilePath & LikeFile, Format:=4, Delimiter:=";", ReadOnly:=True, Local:=True
        End if
End sub

我的实际结果是它打开文件时没有定界。

.csv文件的片段:

  

根据以下内容导航:基金编号;基金名称;股份类型;货币; ISIN代码;价格   (NAV);总资产净值;优异; Tis; Tid; Share ccy;分享价格; TNA份额   汇率   20190321; XX9999; NamedFund; EUI; USD; XX123123; 204.563000000; 165061156.750000000; 806896.369000000 ;;; EUR; 180.070000000; 145293919.06; 1.136050000   20190321; XX9999; NamedFund; EUR; USD; XX; 123123124; 193.437000000; 352547.160000000; 1822.538000000 ;;; EUR; 170.270000000; 310327.15; 1.136050000 20190321; XX9999; NamedFund; USI; USD; XX; XX123125; 104.942000000; 37779152.540000000; 360000.000000000 ;;;   20190321; XX9999; NamedFund; USR; USD; XX123126; 0.000000000; 0.000000000; 0.000000000 ;;;;;;

2 个答案:

答案 0 :(得分:2)

听起来像您需要利用.TextToColumns;它可以指定以分号分隔,例如:

Columns(1).TextToColumns DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False

编辑1:

请注意,您将必须修复数据,因为数据将显示为文本字符串,例如,对数字进行循环并以1的倍数...我昨天发布了一些类似的内容,涉及数据显示数字时显示#Value的数据透视表源数据中存在:

With sws 'source worksheet
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 2 To lr
        .Cells(i, 6).Value = Val(.Cells(i, 6).Value) * 1 'Uses column 6 (F)
    Next i
End With

答案 1 :(得分:1)

如果在导入之前以编程方式将.CSV重命名为.TXT,则定界导入效果更好:

Private Sub CSVimportV2()
    Dim wb As Workbook
    Dim tmpFilename As String
    Dim myPath As String

    myPath = Application.DefaultFilePath & "\example.csv"

    ' delete .txt without questioning
    tmpFilename = Left(myPath, InStrRev(myPath, ".")) & "txt"
    If Dir(tmpFilename) <> "" Then Kill tmpFilename

    ' copy .csv as additional .txt
    FileCopy myPath, tmpFilename

    ' open .txt as new workbook
    Set wb = Workbooks.Open( _
        Filename:=tmpFilename, _
        UpdateLinks:=0, _
        ReadOnly:=True, _
        format:=4, _
        Password:="", _
        WriteResPassword:="", _
        IgnoreReadOnlyRecommended:=False, _
        Origin:=xlWindows, _
        Delimiter:=";", _
        Editable:=True, _
        Notify:=True, _
        Converter:=2, _
        AddToMru:=False, _
        Local:=True, _
        CorruptLoad:=xlNormalLoad)

    ' delete .txt
    If Dir(tmpFilename) <> "" Then Kill tmpFilename

    ' save it als xlsx
    wb.Sheets(1).UsedRange.EntireColumn.AutoFit
    wb.SaveAs Left(myPath, InStrRev(myPath, ".")) & "xlsx", xlOpenXMLWorkbook
End Sub

如果无法正确识别小数点分隔符,请改写Local(可以是TrueFalse

相关问题