2009-02-16 2 views
5

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

Выборочные данные

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 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, я получаю следующее сообщение об ошибке:

Compile error: Named argument not found

То есть --Я think--, потому что Excel 2000 не знает имени аргумент «Локальный».

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

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

Любые идеи?

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

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

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

Workbooks.Open filename:= _ 
       "D:\testdata\Example 01 CSV\input.csv" 

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

Согласно предложению от user barrowc, я также изменил The Windows «Язык и региональные стандарты» Настройки «из немецкого (Швейцария)» «Английский (США)». Даже после перезагрузки Excel ничего не изменилось, такая же проблема.

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

+0

Не могли бы вы опубликовать несколько строк файла CSV, чтобы мы могли взглянуть на него? –

+0

Добавьте свою информацию к вопросу, пожалуйста, не здесь, в комментариях. – isherwood

+0

@isherwood: Готово. – Lernkurve

ответ

3

[Update 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 

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

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

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

+1

Ты спас мой день. Теперь мой макрос работает как в Дании, так и в Китае. –

2

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

2

Я считаю, что это работает для меня в Excel 2000:

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

Вот OpenText метод из Excel 2000:

OpenText Method

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

Syntax

expression.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

source

и вот версия Excel 2003:

OpenText Method [Excel 2003 VBA Language Reference]

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

source

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

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

Local Optional Variant. Specify True if regional settings of the machine should be used for separators, numbers and data formatting.

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

2

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

1

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

Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True 
0

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

0

Re Любые идеи?

Если вы хотите, чтобы исправить файл для других, используя Excel добавить это на первой строке файла без кавычек, сопровождаемых LineBreak: «разделительным =;»

Простой способ открыть вручную тупые файлов является переименовать расширение в .txt или .htm, а затем из Excel использовать файл - Открыть.

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

Смежные вопросы