powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт Excel таблиц в Access (VBA)
25 сообщений из 28, страница 1 из 2
Импорт Excel таблиц в Access (VBA)
    #38339026
SiNtez_26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, господа.
Вопрос следующий: в Access импортируются таблицы Excel с помощью обычного SELECT'a из листа -
Код: sql
1.
INSERT INTO (Поля Access) SELECT Поля Excel FROM [Excel 12.0 xml;HDR=Yes;IMEX=1;DATABASE=" & currentFilePath & "]


Проблемы возникают, когда в Excel файле попадаются столбцы с нестандартными именами, содержащими в себе, например, точки.
Каким образом можно перед импортом открыть файл, c помощью REPLACE заменить точки на пробелы, и импортировать из уже отредактированного файла, не сохраняя его, чтобы не испортить исходник? Методы типа DoCmd.TransferSpreadsheet и "поячеечного" чтения не подходят, поскольку таблица содержит несколько десятков столбцов и около полумиллиона строк, что делает эти методы не совсем подходящими из-за времени выполнения.
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339166
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно - я не спец по Excel, но приглядевшись к коду, я подумал, что надо, просто, игнорировать заголовки столбцов, т.е., вместо
HDR=Yes объявить HDR=No
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339188
SiNtez_26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таком случае придется использовать вместо имен столбцов Excel файла F1, F2... и т.д., что неприемлимо, поскольку столбцов слишком много и можно надолго засесть, учитывая что импортить нужно не одну таблицу. Неужели нельзя все сделать проще?
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339200
SiNtez_26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, забыл добавить, что импортить нужно не все столбцы, что усложняет задачу с применением F1, F2...F N
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339541
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiNtez_26 перед импортом открыть файл, c помощью REPLACE заменить точки на пробелы, и импортировать из уже отредактированного файла, не сохраняя его, чтобы не испортить исходник? А нельзя ли во временный файл сохранить с реплейсами и затем уже импортировать?
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339798
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiNtez_26
Каким образом можно перед импортом открыть файл, c помощью REPLACE заменить точки на пробелы, и импортировать из уже отредактированного файла, не сохраняя его, чтобы не испортить исходник?

Методы типа ... "поячеечного" чтения не подходят ...

Тогда не понятно что вы хотите? Нужно ведь не весь файл считывать а только заголовки столбцов и сделать в них REPLACE.
Лично у меня DoCmd.TransferSpreadsheet импортирует файлы в районе 500к строк (порядка 10 полей) за пару десятков секунд, при этом точку заменяет на # автоматом (после импорта можно заменить на любой символ).
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38339918
BigSergSSP...
Лично у меня DoCmd.TransferSpreadsheet импортирует файлы в районе 500к строк (порядка 10 полей) за пару десятков секунд, при этом точку заменяет на # автоматом (после импорта можно заменить на любой символ).
А как после импорта для всех названий полей в таблице символ # по-быстрому на что-то иное заменить?
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38341024
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
грязный комплектовщик,
Например, вот так:
Код: vbnet
1.
CurrentDb.TableDefs(Table).Fields("Field#").Name=Replace(CurrentDb.TableDefs(Table).Fields("Field#").Name, "#", "")


Но существует и другие способы
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38341034
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BigSergSSPНапример, вот так:
Код: vbnet
1.
CurrentDb.TableDefs(Table).Fields("Field#").Name=Replace(CurrentDb.TableDefs(Table).Fields("Field#").Name, "#", "")


или вот так:
Код: vbnet
1.
CurrentDb.TableDefs(Table).Fields(I).Name=Replace(CurrentDb.TableDefs(Table).Fields(I).Name, "#", "")
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38341928
BigSergSSPНапример, вот так:
Код: vbnet
1.
CurrentDb.TableDefs(Table).Fields(I).Name=Replace(CurrentDb.TableDefs(Table).Fields(I).Name, "#", "")


Спс, отлично сработало.
Для вар-тов кучи полей в исходных эксельках самое то.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub ReplaceCharInTableName(strTableName As String)
Dim bytTableFieldCount As Byte, i As Byte
bytTableFieldCount = CurrentDb.TableDefs(strTableName).Fields.Count
For i = o To bytTableFieldCount - 1
    CurrentDb.TableDefs(strTableName).Fields(i).Name = Replace(CurrentDb.TableDefs(strTableName).Fields(i).Name, "#", " ")
Next i
'MsgBox CurrentDb.TableDefs(strTableName).Fields.Count
End Sub
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38342876
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Sub ReplaceCharInTableName(strTableName As String)
Dim i As Byte
For i = 0 To CurrentDb.TableDefs(strTableName).Fields.Count - 1
    CurrentDb.TableDefs(strTableName).Fields(i).Name = Replace(CurrentDb.TableDefs(strTableName).Fields(i).Name, "#", " ")
Next
'MsgBox CurrentDb.TableDefs(strTableName).Fields.Count
End Sub
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38342903
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigSergSSPили вот так:
...
Туда-же.
В топку.
:)
зы: Вытаскивайте CurrentDB из цикла, кешируйте ссылку на TableDef.
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38343026
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nord-woolfзы: Вытаскивайте CurrentDB из цикла, кешируйте ссылку на TableDef.

Покажи...
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38343168
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub ReplaceCharInFieldsName(strTableName As String)
    Dim fld As DAO.Field
    With CurrentDb
        With .TableDefs(strTableName)
            For Each fld In .Fields
                fld.Name = Replace(fld.Name, "#", vbNullString)
            Next
        End With
    End With
End Sub
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344101
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nord-woolf,

И в чем принципиальная разница? (кроме оформления кода)
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344141
СхБд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BigSergSSP,

сорри
14613477
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344174
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в цифрах, то:
Табличка (пустая) о 10 текстовых полях (в именах нет решеток)
Тестовая процедура:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Sub Test()
    Dim i As Integer, j As Integer
    Dim st As Long
    j = 100
    
    Debug.Print String(10, "-")
    st = apiTimeGetTime
    For i = 1 To j
        ReplaceCharInTableName "tbl1"
    Next i
    Debug.Print "ReplaceCharInTableName", apiTimeGetTime - st
    
    Debug.Print String(10, "-")
    st = apiTimeGetTime
    For i = 1 To j
        ReplaceCharInFieldsName "tbl1"
    Next i
    Debug.Print "ReplaceCharInFieldsName", apiTimeGetTime - st
End Sub


Результаты четырех замеров:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
----------
ReplaceCharInTableName       2875 
----------
ReplaceCharInFieldsName      437 
----------
ReplaceCharInTableName       3062 
----------
ReplaceCharInFieldsName      454 
----------
ReplaceCharInTableName       2921 
----------
ReplaceCharInFieldsName      469 
----------
ReplaceCharInTableName       3047 
----------
ReplaceCharInFieldsName      610 


Так принципиальная разница заметнее? :)
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344175
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СхБдBigSergSSP,

сорри
14613477

По существу, пожалуйста...
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344186
СхБд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BigSergSSPСхБдBigSergSSP,

сорри
14613477

По существу, пожалуйста...
а чо там не посуществу

чем плохо
(с) ...Вытаскивайте CurrentDB из цикла....
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38344202
BigSergSSP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nord-woolf,

Убедительно! :)) Спасибо
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38345611
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Импортирую данные из Ёкселевского файла "Файл.xls" с листа "Лист"
в таблицу "Табл" базы MSA таким запросом:
Код: plaintext
1.
2.
3.
s = "Insert into Табл select * from [Лист$A1:D500]  IN 'Файл.xls' [Excel 5.0;HDR=YES;IMEX=1] where Поле1 > 0 
CurrentDb.Execute s


Всё работает прекрасно.
Не могу придумать, как в этом же запросе в дополнительное поле "ДатаВремя" таблицы "Табл"
записать дату/время выполнения этого запроса, т.е. дату/время импорта данных.
Что нужно добавить в текст запроса, чтобы во все записи таблицы "Табл"
в поле "ДатаВремя" заносилось значение функции Now()?
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38347141
s = "Insert into Табл select *, Now() As ДатаВремя from [Лист$A1:D500] IN 'Файл.xls' [Excel 5.0;HDR=YES;IMEX=1] where Поле1 > 0
CurrentDb.Execute s
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #38348032
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То
Анатолий ( Киев )!

Два дня ждал отклика от ДОБРЫХ людей!
Спасибо, всё получилось!!!!!!!!!!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Импорт Excel таблиц в Access (VBA)
    #39830732
sv1mmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИВП,

Импортирую данные из Ёкселевского файла "Файл.xls" с листа "Лист"
в таблицу "Табл" базы MSA таким запросом:


s = "Insert into Табл select * from [Лист$A1:D500] IN 'Файл.xls' [Excel 5.0;HDR=YES;IMEX=1] where Поле1 > 0
CurrentDb.Execute s

Мне нужно создать запрос в VBA на добавление данных их таблицы Excell в Acces. Используя ваш вышеперечисленный способ выходит ошибка "Object required" Что не так делаю?
...
Рейтинг: 0 / 0
Импорт Excel таблиц в Access (VBA)
    #39830741
Вы лучше покажите реальную строку SQL вашего запроса.
Вы ее в конструктор запросов вставляли? Список полей видели? Открыть как таблицу пробовали?
Может пример файла пришлете для опытов?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Импорт Excel таблиц в Access (VBA)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]