Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 923

Как программно загрузить область листа Excel в уже существующую таблицу Access

20.07.2023, 00:07. Показов 2363. Ответов 26

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

Говорят, надо использовать промежуточную таблицу, где все поля будут иметь имена F1, F2, F3, F4 ... ну и т.д.
А уже потом из неё переписывать в существующую таблицу.

А других вариантов нет?

Прикладываю пример базы с таблицей и файл Excel, который надо подгружать
Вложения
Тип файла: rar DBtest.rar (17.3 Кб, 23 просмотров)
Тип файла: xlsx Test.xlsx (98.0 Кб, 26 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.07.2023, 00:07
Ответы с готовыми решениями:

Вывод данных из DBrida в уже существующую таблицу Excel
Здравствуйте, подскажите(хотя понимаю в Инете куча инфы, только я ничего подходящего не нашел...), в общем такая проблема: Есть Dbgrid с...

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

Вставка строки в уже существующую таблицу в Word c объединенными как по вертикали так и по горизонтали ячейками
Доброго времен суток. В существующей таблице в документе Word необходимо динамически вставлять строки и столбцы в зависимости от данных в...

26
 Аватар для alecko5
885 / 148 / 35
Регистрация: 05.08.2022
Сообщений: 681
21.07.2023, 12:27
Студворк — интернет-сервис помощи студентам
Silur, смысл открывать эти файлы непосредственно? Это может быть долго. Быстрее открывать рекордсет.
вытащил кусок из скрипта, что относится к теме.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Const  strNamelist = "Sheet1"
Cnct(0) = "Provider=Microsoft.ACE.OLEDB.12.0;"
Cnct(2) = "Extended Properties=""Excel 12.0;HDR=Yes"";"
strPath = Main2.TextBox2 ' файлы в папке "Прога"
If strPath = "" Then MsgBox "Папка не указана", , "Работа прервана": Exit Sub ' не указана папка
 
 Set cnn = New ADODB.Connection
 Set rst = New ADODB.Recordset
Set fso = CreateObject("Scripting.FileSystemObject")
Set folders = fso.getfolder(strPath)
Set objExel = New Excel.Application 'CreateObject("Excel.Application")
 
For Each file1 In folders.Files ' проходим по папке
' ---------------------------------------------------------
' здесь определяем имя листа, чтобы открыть рекордсет - но в файлах ,создаваемых прогой листы называются одинаково - аоэтому тратить время на открытие не будем.
' открываем коннекшн
Cnct(1) = "Data Source=" & file1.Path & ";"
' создаем SQL запрос
cnn.Open ConnectionString:=Cnct(0) & Cnct(1) & Cnct(2)
' открываем рекордсет с данными из оригинала
str2 = "select * from [" & strNamelist & "$];"
rst.Open str2, cnn, adOpenStatic
1
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,644
21.07.2023, 13:28
Цитата Сообщение от Silur Посмотреть сообщение
В базе есть уже существующая таблица, куда надо подгружать данные из различных однотипных файлов Excel.
... ну и я решил поучаствовать (до кучи)

- Если задачка стоит в грубом заполнении её (таблицы) данными (для последующего анализа и обработки), то можно таким несложным решением:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Private Type utExcelList
    sListName As String
    lRowsCount As Long
End Type
 
Public Sub sbImportEx()
Dim sExcelFilePath As String, strSql$
Dim sRange$
Dim utvListData As utExcelList
   
   sExcelFilePath = "d:\Temp\Test.xlsx"
   utvListData = GetListData(sExcelFilePath)
   If utvListData.lRowsCount < 13 Then
        MsgBox "Фаил: " & sExcelFilePath & " не содержит данных!", vbExclamation
        Exit Sub
   End If
   
   sRange = "A13:Q" & utvListData.lRowsCount
    
    strSql = "INSERT INTO 22_temp_plan " & vbCrLf & _
    "   ( Идентиф, Застройщик, Область, Район, Объект, МероприятиеПлан, ОбластьОб, РайонОб, ГодПлан, ИнвестВсего,  " & vbCrLf & _
    "   ИнестГос, ИнвестСобств, должность, ИнвестКредиты, ИнвестПрочие, ФИО, Примечания ) " & vbCrLf & _
    "SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17 " & vbCrLf & _
    "FROM (SELECT * FROM [" & utvListData.sListName & "$" & sRange & "] IN '" & sExcelFilePath & "' [Excel 12.0 XML;HDR=No]) AS EXELDATA;"
    'Debug.Print strSql
    
    CurrentDb.Execute strSql, dbFailOnError
    
    MsgBox "Успешно импортировано: " & utvListData.lRowsCount - 13  & " записей.", vbInformation, "Инфо"
 
End Sub
 
 
Private Function GetListData(strPath$) As utExcelList
Dim objExcelApp As Object
Dim objWorkbook As Object
Dim objWorksheet As Object
    
    Set objExcelApp = CreateObject("Excel.Application")
    Set objWorkbook = objExcelApp.Workbooks.Open(strPath)
    Set objWorksheet = objWorkbook.Worksheets(1)
 
    GetListData.sListName = objWorksheet.Name
    ' Заполненные строки на листе
    GetListData.lRowsCount = objWorksheet.UsedRange.Rows.Count
 
    On Error Resume Next
    objWorkbook.Close
    Set objWorkbook = Nothing
    objExcelApp.Quit
    Set objExcelApp = Nothing
    Err.Clear
 
    
End Function
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
22.07.2023, 06:49
Цитата Сообщение от Silur Посмотреть сообщение
Раньше я убирал этот заголовок, подставлял заголовок в 1 строку и грузил файл
Надеюсь не ручками?
0
 Аватар для Silur
1370 / 290 / 16
Регистрация: 16.01.2014
Сообщений: 923
22.07.2023, 12:56  [ТС]
Цитата Сообщение от alecko5 Посмотреть сообщение
' здесь определяем имя листа, чтобы открыть рекордсет - но в файлах, создаваемых прогой листы называются одинаково - а по этому тратить время на открытие не будем.
А вот и нет. Прога каждому листу присваивает оригинальное название - наименование организации. Но это всегда первый лист, так что к нему можно обращаться по индексу

Добавлено через 6 минут
Цитата Сообщение от alvk Посмотреть сообщение
Надеюсь не ручками?
Ручками, ручками...
Их было мало. И я не знаю, как это сделать программно в Excel файле. Ну не было необходимости раньше разбираться в этом

Добавлено через 1 минуту
Менять шрифт, форматировать - это я делал. А вот удалять строки - нет
0
 Аватар для alecko5
885 / 148 / 35
Регистрация: 05.08.2022
Сообщений: 681
22.07.2023, 13:21
Цитата Сообщение от Silur Посмотреть сообщение
А вот и нет.
Цитата Сообщение от alecko5 Посмотреть сообщение
вытащил кусок из скрипта,
комментарии имеют отношение к той ситуации-здесь только идея, а реализация всегда по месту.
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
23.07.2023, 09:16
Цитата Сообщение от Silur Посмотреть сообщение
Ну не было необходимости раньше разбираться в этом
В Экселе есть запись макроса, она даст код, потом этот код приспосабливаем под Акцесс.
Ну а открывать и закрывать файл экселя вы умеете.
0
126 / 96 / 33
Регистрация: 28.02.2017
Сообщений: 478
24.07.2023, 12:15
Цитата Сообщение от Silur Посмотреть сообщение
А других вариантов нет?
Посмотри такой вариант. Загружаются не все поля, остальные по аналогии.
Вложения
Тип файла: rar DBtest.rar (62.7 Кб, 11 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2023, 12:15

Как в Visual Basic 6 добавить запись в существующую таблицу MS Access ?
Здравствуйте ! Мне необходимо решить следующую задачу: допустим существует таблица MS Access 2003 c двумя напр. полями Field1 и Field2....

Как програмного добавить новую таблицу в существующую базу данных ACCESS?
Добрый день, у меня вопрос. возьмем edit.text и Button. Мне нужно чтобы при нажатии на кнопку, создавалась таблица с названием указанным в...

Считать данные с листа Excel и записать в таблицу Access и в файл последовательного доступа
Помогите пожалуста в VBA вообще чайник полнй ноль Нужно написать программу а я не знаю как. Задание звучит так надо написать программу,...

Вставка строки в уже существующую таблицу в Word
Добрый день. Ломаю голову над казалось бы элементарной задачей. В документе Word существует таблица, уже сформатированная должным образом....

Отобразить в приложении WPF уже существующую таблицу из БД MS SQL Server
Задача: отобразить в приложении WPF уже существующую таблицу из БД MS SQL Server. В WinForms это решалось при помощи DataGriedView,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru