Есть ли функция на VBA которая позволяла бы импортировать таблицы из excel и .txt?
А где, собсвенно VBA? В Excel или в Access?
В Excel это метод SaveAs, в Access можно тот же метод для объекта, созданного методом GetObject("Путь к XLS), можно DoCmd.TransferText из прилинкованной таблицы Excel, а можно не линкуя таблицу запросом SELECT * INTO ... с соответств. строками подключения к источнику и адресату.
В Аксесс.
Есть как понял функция для импорта из эксель:
автор |
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TestTable2", "c:\a.xls", 0 |
Но она импортирует только первый лист. Как можно указать, конкретный лист для импорта?
пытаюсь импортировать с txt файла, но разделитель у меня в файле это tab. как можно изменить спецификацию, чтобы вместо ; был tab?
автор |
DoCmd.TransferText acImportDelim, , "table", "c:\b.txt", False |
В инете все пишут про scheme.ini. Поискал на компе, нет такого файла.
Вы не дочитали описание TransferSpreadsheet ровно на 1 параметр. Следующий же из пропущенных это Range, в котором можно описать лист екселя или диапазон
Kuatishe |
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TestTable2", "c:\a.xls", 0, "Лист2$" |
Добавлю.
Мне кажется более удобным импортировать с помощью запроса.
select * into TestTable2
from [Лист2$] as x IN 'c:\a.xls'[Excel 8.0;HDR=yes;]
Кстати, во From можно задавать произвольный диапазон, например [Лист2$a20:d2000]
В-общем догнал что за файл, создал его, вот его параметры:
автор |
[b.txt] ColNameHeader=False Format=Delimited( ) MaxScanRows=0 DecimalSymbol=. CharacterSet=ANSI |
разделитель здесь это пробел, но при импорте все равно все данные сохраняются в один столбец таблицы.
хелп! как можно импортировать так, чтобы данные после пробелов сохранялись в отдельный столбец? Варианты кроме смены настроек в реестре.
Для импорта/экспорта/связывания в Access предусмотрены спецификации. При импорте через меню вы попадаете в мастер настройки спецификации, создаете, сохраняете, и в дальнейшем можете использовать ее:
DoCmd.TransferText acImportDelim, "Имя спецификации" , "table", "c:\b.txt", False
Родная для текстового драйвера спецификация, это файл scheme.ini. Его тоже можно использовать.
Подробнее обо всем этом почитайте здесь
Всем спасибо, за помощь.
Напишу-ка я резюме по теме, чтобы кто будет искать, мог получить более-менее исчерпвыающий ответ.
Есть разные варианты импорта txt и xls файлов, один из них использование функций:
1) для txt файлов я использовал DoCmd.TransferText. Вот мой пример:0
DoCmd.TransferText acImportDelim, , "Text", "c:\b.txt"
acImportDelim - это означает что будет производиться импорт.
, , - значит используется параметр по умолчанию(разделитель столбцов)
"text"- имя таблицы куда будет импортирован файл.
"c:\b.txt" - путь и имя txt файла, откуда будет производиться импорт.
2) для xls файлов я использовал DoCmd.TransferSpreadsheet, вот пример использования:
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TestTable1", "c:\a.xls", 0, "Sheet$"
acImport - будет произоводиться импорт.
acSpreadsheetTypeExcel9 - некий параметр, незнаю что означает.
"TestTable1" - имя таблицы в Аксесс, куда будет все импортироваться.
"c:\a.xls" - путь и имя файла.
0 - не знаю зачем.
"Sheet$" - имя листа из книги xls, который будет импортирован в таблицу.
А что ж запросом то не попробовали? Гибче чем трансфером. Хотя бы для того, чтобы не плодить таблицы, можно запросом на выборку (вместо Select * Into Таблица оставить только Select *) считать данные в рекордсет и раскидать их рекордсетами также по нужным таблицам.
Посмотрите. Полезно.
спасибо, попробуем.
Вопрос по импорту и экспорту файлов:
Как можно сделать так, чтобы импорт и экспорт файлов производился в ту же директорию где и БД Аксесса, независимо от каталога, в котором находится БД?
ПРобовал с CurDir - не получается.
Текущая папка - currentproject.Path.
А что не получилось? Покажите ваш код
Я делал так:
DoCmd.TransferText acImportDelim, , "Text", CurDir & "\" & "b.txt"
CurDir - возвращает текущий/рабочий каталог в "терминалоги ДОС" - установленный инструкцией ChDir
т.е. это ниразу не каталог БД
хотя - в хелпе сделанно всё что бы так и считали ))