Workbooks.OpenText, игнорирующий параметр столбца FieldInfo - PullRequest
3 голосов
/ 14 марта 2019

У меня есть строка ниже для импорта файла формата csv.

 Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(18, 5), Array(19, 5)), Local:=True

Из документации Microsoft здесь , FieldInfo не обязательно должен быть в любом порядке, если он находится вразграничены.

Спецификаторы столбцов могут быть в любом порядке.Если во входных данных нет спецификатора столбца для определенного столбца, столбец анализируется с помощью общей настройки.

Однако в Excel, похоже, первый массив считается первым столбцом, а второй - вторым столбцомЧто бы я ни указывал в первом параметре Array(Array(x, 5), Array(y, 5)).Таким образом, чтобы добраться до 18-го и 19-го столбцов, я должен сделать это, что не очень красиво:

Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, _
    FieldInfo:=Array(Array(1, 1), _
    Array(2, 1), _
    Array(3, 1), _
    Array(4, 1), _
    Array(5, 1), _
    Array(6, 1), _
    Array(7, 1), _
    Array(8, 1), _
    Array(9, 1), _
    Array(10, 1), _
    Array(11, 1), _
    Array(12, 1), _
    Array(13, 1), _
    Array(14, 1), _
    Array(15, 1), _
    Array(16, 1), _
    Array(17, 1), _
    Array(18, 5), _
    Array(19, 5)), _
    Local:=True

Пример данных файла CSV:

fill_c1,pick_n2,po_num3,quanti4,addres5,cust_s6,color_7,size_d8,style9,shipto10,shipto11,addres12,addres13,city14,state15,zipcod16,custom17,start_18,end_da19,udford20
"52","1","2","000000001","000000000000000000000000000000","6","Z","XS","7","","","","","","","","M",20190310,20190318,"CF3"
"52","1","2","000000002","000000000000000000000000000000","6","Z","S","7","","","","","","","","M","20190310","20190318","CF3"

Ответы [ 2 ]

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

Это действительно похоже на ошибку или документация вводит в заблуждение.Одним из способов избежать уродливого кода является импорт текстового файла без его разделения и использование TextToColumns для его разделения.Нечто подобное (что, как ни странно, похоже, работает):

Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=False

Columns("A:A").TextToColumns Destination:=Range("A1"), _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    FieldInfo:=Array(Array(18, 4), Array(19, 4))
2 голосов
/ 14 марта 2019

Мне удалось воспроизвести эту проблему, используя файл .txt и используя Tab=True:

Workbooks.OpenText Filename:=Path & "Testfile.txt", DataType:=xlDelimited, Tab:=True, FieldInfo:=Array(Array(18, 9), Array(19, 9)), Local:=True

И используя значение 9 (xlSkipColumn), я попытался опустить столбцы 18 и 19, но столбцы 1 и 2 были пропущены (Test1 и Test2):

img1

Документация для четко говорит "Спецификаторы столбцов могут быть в любом порядке", но это выглядит неправильно. Первым элементом первого массива всегда будет столбец 1, первым элементом второго массива всегда будет столбец 2, и после того, как все массивы будут повторены, остальные столбцы будут проанализированы с установкой General.

IMO, для меня это похоже на ошибку. Если это , а не ошибка, то документация очень запутанная и должна быть переписана.

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