2013-04-30 2 views
2

Мне нужно пропустить первые три строки CSV-файла при загрузке в MS Access. Импорт CSV по умолчанию не переносит первые три строки. Я подумываю написать макрос, чтобы игнорировать первые три строки.Пропустить первые три строки файла CSV (используя DoCmd?) В MS Access

Мои исследования показали объект DoCmd, но его методы не позволяют отказаться от первых x строк.

Любые мысли?

ответ

6

DoCmd.TransferText method принимает имя SpecificationName как один из своих аргументов. Следуйте инструкциям на странице How to Create an Import Specification, чтобы создать и сохранить спецификацию импорта.

Теперь перейдите в раздел «Параметры доступа», «Параметры навигации» и покажите скрытые/системные объекты. Теперь вы можете открыть таблицу с именем «mSysIMEXSpecs». Найдите спецификацию импорта, созданную ранее, на основе столбца SpecName. Измените столбец «StartRow» для этой спецификации импорта на 3 (StartRow основан на нулевом значении).

Теперь вы должны использовать метод DoCmd.TransferText, передавая имя созданной вами спецификации импорта и пропустив первые три строки.

+0

+1 Sneaky! Это определенно хорошая идея ** записать ** это в коде, если вы решите использовать эту технику, иначе следующая бедная душа, которая работает в этой базе данных, может сходить с ума, пытаясь понять, почему начальные строки пропускаются. Тем не менее, спасибо за обмен! –

+0

Хорошая точка. Я на самом деле написал модуль класса, который программно управляет моими параметрами импорта/экспорта, потому что я устал от поиска существующих спецификаций при попытке отладки проблем. Но это целая запись в блоге, которую я не хотел вдаваться сюда! – mwolfe02

+0

@ mwolfe02 Я просто сделал это, и он работает благодаря. Я просто хотел указать, что StartRow основан на 0. в моем случае я хотел пропустить 2 строки, и я ввел 2 в StartRow, поэтому для этого примера он должен ввести 3 в StartRow. если он войдет в 4, он потеряет строку данных. – mendel

1

В Access VBA Я хотел бы использовать два TextStream объектов, один в .ReadLine исходный CSV-файл строка за строкой, а другой .WriteLine временный файл, пропуская первые три строки входного файла. Сделайте некоторые поисковые запросы в Интернете по адресу Scripting.FileSystemObject, и я уверен, что вы найдете для этого образец кода.

Тогда я бы использовал DoCmd.TransferText acImportDelim для импорта временного файла в Access.

+0

+1 Этот подход был на самом деле моей первой мыслью. Управление временными файлами имеет свой собственный набор накладных расходов, но намерение программиста было бы более явным без необходимости в хороших комментариях. Шесть с половиной десятков, как я это вижу. – mwolfe02

1

Метод Docmd.TransferText является хорошим вариантом, но в качестве альтернативы изменению спецификации импорта вы можете рассмотреть возможность импорта всего и выполнения некоторой проверки после импорта.

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

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

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