Открытие файла CSV с разделителем точек с запятой - PullRequest
0 голосов
/ 29 марта 2019

У меня есть простой макрос, который должен открыть файл .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:

Nav согласно; Идентификатор фонда; Название фонда; Тип акции; Валюта; Код ISIN; Цена(NAV); Всего NAV; Выдающийся; Tis; Tid; Share ccy;Цена акции;Доля в TNA; обменный курс 20190321; XX9999; именной фонд; EUI; USD; XX123123; 204,563000000; 165061156.750000000; 806896.369000000 ;;; EUR;;;; EUR; 170.270000000; 310327.15; 1.136050000 20190321; XX9999; NamedFund; USI; USD; XX123125; 104.942000000; 37779152.540000000; 360000.000000000 ;;;;;;20190321; XX9999; NamedFund; USR; USD; XX123126; 0,000000000; 0,000000000; 0,000000000 ;;;;;;

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Похоже, вам нужно использовать .TextToColumns; можно указать для разделения на точку с запятой, например ::10000

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

Edit1:

Обратите внимание, что вам придется исправить ваши данные, так как они будут отображаться в виде текстовой строки, например, выполнить цикл по вашим числам и умножить их на 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 голос
/ 30 марта 2019

Импорт с разделителями работает лучше, если вы переименуете свой .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 (может быть Trueили False)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...