Импортируйте файл CSV в VBA, но не можете сохранить посторонние символы - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать сценарий, в котором я нажимаю кнопку, и вы получаете всплывающее окно, в котором вы выбираете файл .CSV и затем загружаете его в конкретное место назначения. До сих пор мне удавалось делать то, что я только что сказал, но как неанглоязычный пользователь данные в моем .CSV написаны на шведском языке, и мне нужно сохранить наши «специальные» символы.

Я пытался записать загрузку файла с помощью мастера импорта данных, но не могу обернуть голову вокруг этого кода, чтобы он работал с переменной name / filepath.

Пока у меня есть код ниже, он загружает файл быстро и безболезненно, но не сохраняет специальные символы, такие как «åäö».

Dim ws As Worksheet, strFile As String

Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")


With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileSemicolonDelimiter = True
    .PreserveFormatting = True
    .Refresh
End With

Исходный файл .CSV в соответствии с мастером импорта - "65001: Unicode (UTF-8)", и я попытался найти свойства для .QueryTables, чтобы распознать это.

Я попробовал одну из многих вещей:

.QueryType = xlOLEDBQuery / xlTextImport
.TextFilePlatform = xlWindows / xlMSDOS

но .QueryType дает мне только «объект не поддерживает этот метод или свойство» или «недопустимое присвоение свойства».

Такое ощущение, что проблема в том, что Excel не знает, как он должен относиться к кодировке файла (Unicode (UTF-8)), но я довольно новичок в этой области, поэтому я могу искать неправильные вещи.

1 Ответ

0 голосов
/ 10 января 2019

Благодаря @ Рону Розенфельду, который привел меня в правильном направлении, я нашел решение этой проблемы.

Все, что нужно было:

.TextFilePlatform = 65001

Я включил Legacy Импорт данных для текста в Файл> Параметры> Данные. Затем я записал свое действие при импорте, в этом коде я нашел строку выше, которая решила мою проблему. Конечный код:

Dim ws As Worksheet, strFile As String

Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileSemicolonDelimiter = True
    .PreserveFormatting = True
    .TextFilePlatform = 65001
    .Refresh
End With
...