2013-02-25 3 views
6

Я пытаюсь автоматизировать добавление новых txt-файлов, все из которых имеют одинаковый (известный) макет.Импорт текста с разделителями с использованием VBA

Столбцы разделены с помощью вкладок (кнопка TAB). Возможно ли это сделать в VBA, например, в Мастере доступа для импорта текстовых файлов?

Я использую метод DoCmd.TransferText в VBA

+0

Самый простой способ начать с такого рода процесса записи макроса вас делать это вручную в excel/access или что-то еще, затем взять сгенерированный VBA и обобщить его для входных параметров и т. д. –

+0

@JonEgerton Я не верю, что вы можете записывать макросы в Access. – Brad

+0

Нет, но вы должны иметь возможность сделать это в Excel, а затем повторно использовать сгенерированный VB в свой код - объектная модель будет доступна (пока вы будете тянуть правильные ссылки). –

ответ

11

Вам нужно будет пройти через мастер один раз, чтобы сделать ваш файл спецификация. Чтобы сделать это, импортируйте свой текстовый файл, как обычно, но прежде чем вы углубитесь в мастер, нажмите на нижнюю левую кнопку «Дополнительно ...». Здесь вы делаете свой spec-файл.

enter image description here

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

enter image description here

Сохранить спецификацию (который позже может быть отредактирован, возвращаясь к этому же экране и нажать кнопку Specs... затем сохранить над вашей старой один)

Теперь вы можете использовать в VBA, как это

DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath 

Существует параметр HasFieldNames, что вам нужно будет решить, есть ли оно true или false на основе вашего файла.

+1

Технически вы также можете собрать свои собственные спецификации ввода-вывода из XML, используя новый API профиля импорта/экспорта. Это сложно, но возможно - я сам это делал раньше.См. [ImportExportSpecification] (http://msdn.microsoft.com/en-us/library/ff820988.aspx), [Новая спецификация импорта/экспорта OM] (http://blogs.msdn.com/b/thirdoffive/ архив/2006/10/12/the-new-import-export-specification-om.aspx), [Новый пользовательский интерфейс для импорта/экспорта] (http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) –

+0

@JoshuaHonig В чем преимущество сделать это самостоятельно? Является ли отображение «лучше», чем этот метод? Это довольно быстрый процесс, нет? – Brad

+0

Вы можете создавать спецификации «на лету» во время выполнения. Иногда это необходимо, особенно если приложение распространяется среди других людей. –

2

С мастером импорта недостатком является то, что даже при малейшем изменении формата файла вам нужно будет щелкнуть все эти шаги еще раз, чтобы получить импорт.

Отредактируйте ответ @ Remou в ms Access import table from file in a query для того, чтобы сделать это в прямом SQL. Я фактически использую тот же метод в моем проекте. Я использую что-то вроде этого (см. Мою ссылку для деталей):

insert into MyTable (column-list...) 
select (column-list...) 
from [data-source-specifications].[file-name] 
any-other-clauses...; 

Только одно предостережение. Если вы помещаете этот синтаксис SQL в обычный объект запроса Access, есть хороший шанс, что Access будет калечить его до такой степени, что он даже не сможет открыть объект запроса. Поэтому создайте и сохраните запрос в текстовом файле, пока вы его попробуете в Access. После того как запрос будет проверен и работает, сохраните его в подпрограмме VBA, так что доступ будет запускать его таким, как есть, например, так:

sub MyTableImport() 
    sqlStr = "   insert into MyTable (column-list) " ' leave a space at the 
    sqlStr = sqlStr & "select (column-list...) " ' end of each line of the string 
    sqlStr = sqlStr & "from [data-source-specifications].[file-name] " 
    sqlStr = sqlStr & "any-other-clauses... ;" 

    DoCmd.RunSQL sqlStr 
end sub 
Смежные вопросы