Открытие файла CSV с разделителями с запятой

Вопрос:Как открыть файл CSV с разделительной точкой с запятой с помощью VBA в Excel 2000? Примеры данных An ID;TEST20090222 A Name;Firstname Surname A Date;11.05.2000 Country:;SomeCountryName Currency;EUR CostA; CostB; CostC; Part1;10;20;30 Part2;;;; Part3;34;56;87 код В Excel 2003 11.8231.8221 SP3 с VBA 6.5.1025 я могу открыть файл с разделителями с запятой со следующим кодом VBA: Workbooks.OpenText filename:=myFilename,

Вопрос:

Как открыть файл CSV с разделительной точкой с запятой с помощью VBA в Excel 2000?

Примеры данных

An ID;TEST20090222 A Name;Firstname Surname A Date;11.05.2000 Country:;SomeCountryName Currency;EUR CostA; CostB; CostC; Part1;10;20;30 Part2;;;; Part3;34;56;87

код

В Excel 2003 11.8231.8221 SP3 с VBA 6.5.1025 я могу открыть файл с разделителями с запятой со следующим кодом VBA:

Workbooks.OpenText filename:=myFilename, _ DataType:=xlDelimited, Semicolon:=True, Local:=True

Однако, когда тот же самый код запускается в Excel 2000 9.0.8961 SP1 с VBA 6.5.1025, я получаю следующую ошибку:

Ошибка компиляции: Именованный аргумент не найден

То есть – я думаю… потому что Excel 2000 не знает именованный аргумент “Local”.

Поэтому я удалил часть “Local: = True”. Но тогда проблема заключается в том, что целая строка из файла CSV записывается в одну ячейку, а не разбивается на отдельные части с запятой.

Я искал Интернет для решения, но не нашел ничего полезного и кратким.

Любые идеи?

[Обновление 17.02.2009]

Я попробовал предложение user lc с помощью макрорекордера. Однако результаты были непонятными.

Когда я открываю CSV файл с меню File- > Open… и затем выбираю CSV файл, данные, разделенные точкой с запятой, правильно разбираются. И записанный код так же прост, как:

Workbooks.Open filename:= _ «D:testdataExample 01 CSVinput.csv»

Но когда я использую этот код VBA в своем макросе, каждая строка снова попадает в одну ячейку.

В соответствии с предложением пользователя barrowc, я также изменил параметры “Региональные и языковые параметры Windows” с “German (Switzerland)” на “English (United) Состояния)”. Даже после перезагрузки Excel ничего не изменилось, такая же проблема.

Интересно, почему он работает над системой пользователя Remou. Какие региональные и языковые настройки у вас есть?

Лучший ответ:

[Обновить 22.02.2009]

В то же время я решил проблему, написав функцию импорта самостоятельно, вместо использования Workbooks.OpenText.

Я просто открываю CSV файл в виде текстового файла, читаю строки за строкой, разбивая каждую строку на разделенные точкой с запятой и записываю каждый элемент в ячейку.

Sub ImportCSVFile(filepath As String) Dim line As String Dim arrayOfElements Dim linenumber As Integer Dim elementnumber As Integer Dim element As Variant linenumber = 0 elementnumber = 0 Open filepath For Input As #1 ‘ Open file for input Do While Not EOF(1) ‘ Loop until end of file linenumber = linenumber + 1 Line Input #1, line arrayOfElements = Split(line, «;») elementnumber = 0 For Each element In arrayOfElements elementnumber = elementnumber + 1 Cells(linenumber, elementnumber).Value = element Next Loop Close #1 ‘ Close file. End Sub

Получил вдохновение от Шасура: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html

Я до сих пор не знаю, почему Workbooks.OpenText не работает в моей системе, даже если он работает в системе пользователя Remou. Я предполагаю, что это может иметь какое-то отношение к языку операционной системы (английский) и региональным и языковым настройкам (немецкий, Швейцария), но я не уверен.

Во всяком случае, обходной путь работает для меня. Благодарим вас за предложения и помощь!

Ответ №1

Не уверен, но вы можете попробовать записать макрос, чтобы сделать то же самое, и проверить код VBA, который он создает. Вы можете получить подсказку о том, чего не хватает.

Ответ №2

Я нахожу, что это работает для меня в Excel 2000:

Workbooks.OpenText filename:=myFilename, _ DataType:=xlDelimited, Semicolon:=True Ответ №3

Здесь метод OpenText из Excel 2000:

Метод OpenText

Загружает и анализирует текстовый файл как новый книга с одним листом, который содержит проанализированные текстовые файлы.

Синтаксис

expression.OpenText(Имя файла, Происхождение, StartRow, DataType, TextQualifier, Последовательный разделитель, вкладка, точка с запятой, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

источник

и здесь версия Excel 2003:

Метод OpenText [Справочник по языку VBA Excel 2003]

Загружает и анализирует текстовый файл как новый книга с одним листом, который содержит проанализированные текстовые файлы.

expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, точка с запятой, запятая, космос, другое, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

источник

поэтому Local действительно был новым параметром для Excel 2003 и не будет работать в Excel 2000

Нет идеи относительно причины ошибочного поведения. Параметр Local определяется как:

Локальный Необязательный Вариант. Укажите True, если региональные настройки машины следует использовать для разделители, цифры и данные форматирования.

Возможно, вы захотите дважды проверить региональные настройки на компьютере Excel 2000 и проверить, есть ли что-то, что может привести к неправильной интерпретации данных. Кроме того, попробуйте явно указать параметры DecimalSeparator и ThousandsSeparator в методе Excel 2000 и посмотреть, помогает ли это

Ответ №4

Еще одно обходное решение – просто переименуйте CSV файлы в .txt и используйте метод OpenText.

Ответ №5

Я предпочитаю:

Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True Ответ №6

часто запятая имеет значение “true” как разделитель, где обычно это десятичный разделитель. Добавить DecimalSeparator: = “,” и Боб вашего дяди

Ответ №7

Re Любые идеи?

Если вы хотите исправить файл для других, используя excel, добавьте это в первую строку файла без кавычек, за которыми следует строка: “sep =;”

Простым способом ручного открытия глупых файлов является переименование расширения на .txt или .htm, а затем из файла Excel – Open.

Из VBA я рекомендую искать метод в MSDN и вручную указывать каждый параметр, мой опыт в том, что это устраняет большинство региональных проблем.

Оцените статью
Добавить комментарий