2014-11-06 6 views
0

У меня есть макрос в Access, который для всех файлов в папке переформатирует и импортирует данные в таблицы Access. Для большинства этих файлов он отлично работает, однако для некоторых он ничего не импортирует. Я отлажен процесс и обнаружил, что, когда эти файлы втягивается в набор записей, я создал, чтобы держать их, как я переформатировать каждый символ разбивается с Upsidedown «L»:MS Access VBA - Импорт CSV-файлов - перевернутый «L»

ScreenShot.png

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

Любая идея, что вызывает это?

Link to example file on Google Drive

ответ

2

CSV-файлы, которые вы пытаетесь импортировать, по-видимому был сохранен в кодировке Unicode (в частности, utf16-LE) и Access пытается прочитать их, как если бы они были закодированы как «ANSI» (Windows- 1252), так

  • первые два "смешные персонажи" являются Byte Order Mark (BOM), 0xFFFE, который Access интерпретирует как ÿþ и
  • Вкрапленная "вверх-вниз" L" символы представления байтов верхнего порядка 0x00 каждого символа Unicode

HexEdit.png

Это может произойти, если вы пытаетесь импортировать файл CSV без спецификации импорта, поскольку в этом случае доступ будет «угадать» в структуре файла и считать такие вещи, как

  • кодировка ("Code Page") является "ANSI" (или иногда "OEM"),
  • поле разграничителя ,,
  • Текст Классификатор является " (или, возможно, {none})

Решение заключается в создании спецификации сохраненную импорта и поставить его имя в качестве второго аргумента DoCmd.TransferText метода, который выполняет импорт. Подробнее о создании сохраненной спецификации импорта см. Мой другой ответ here.