Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/103: Рейтинг темы: голосов - 103, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29

Импорт данных из Excel в Access

06.02.2016, 19:44. Показов 21376. Ответов 64
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, очень нужна помощь.

Как автоматически с помощью кода VBA (по нажатию кнопки) импортировать данные из определенной ячейки таблицы Excel в определенный атрибут таблицы Access?

Получилось только импортировать несколько ячеек подряд в таблицу (без выбора атрибута, все хаотично), но это не то, что нужно:
Visual Basic Скопировано
1
2
3
4
5
6
Private Sub Кнопка0_Click()
 
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
 "exportSample", "D:\Sample.xlsx", True, "A1:G5"
 
End Sub
С помощью данного кода выбираются вручную файлы Excel формата и после нажатия импортируются все данные подряд из таблицы Excel в таблицу Access.
Visual Basic Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Кнопка13_Click()
 
Dim FName As String
Dim result As Integer
With Application.FileDialog(1)
   .Title = "Select file"
   .InitialFileName = "D:\DB" 'default path Путь по умолчанию
   .AllowMultiSelect = False
   .Filters.Clear
   .Filters.Add "MS Excel", "*.xlsx", 1
result = .Show
 
If result = 0 Then Exit Sub
FName = Trim(.SelectedItems.Item(1))
End With
 
 
DoCmd.TransferSpreadsheet aclImport, , "importSample", FName, True
 
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2016, 19:44
Ответы с готовыми решениями:

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в общую базу в Access. Для отчета...

Импорт данных из excel в access
Доброе время суток! При создании базы данных я столкнулся с проблемой, которую пока не могу решить, возможно я найду здесь ответ. Проблема...

Импорт данных из Excel в Access
День добрый, уважаемое сообщество! Прошу помощи в настройке импорта данных из Excel в Access. Посмотрел похожие задачи, рассмотренные...

64
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
06.02.2016, 21:46
Нужно делать именно импорт или можно скопировать данные?
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
06.02.2016, 21:57  [ТС]
А в чем отличие, поясните пожалуйста? При импорте же данные не исчезают из таблицы Excel.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
06.02.2016, 23:29
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
А в чем отличие, поясните пожалуйста? При импорте же данные не исчезают из таблицы Excel.
При импорте в Аксес появляется таблица, которой не было. При вставке данных таблица существует и до вставки, проосто после вставки в ей появляются новые данные.

Добавлено через 3 минуты
Но и то, и другое можно сделать запросом.

SQL Скопировано
1
2
SELECT * INTO ИмяТаблицы
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Добавлено через 39 секунд
SQL Скопировано
1
2
3
INSERT INTO ИмяТаблицы
SELECT *
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Добавлено через 2 минуты
Правите выражения Into и Select и таким способом определяете, какой й столбец Excel в какое поле Access.

Добавлено через 3 минуты
Скажем,

SQL Скопировано
1
2
3
INSERT INTO ИмяТаблицы (Поле1, Поле2, Поле3)
SELECT F1, F4, F2
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
отправит 1 столбец в Поле1, 2й - в Поле3, 4й - в Поле2.
3
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
06.02.2016, 23:45  [ТС]
Спасибо за отзывчивость и помощь, но это не то.
Я загрузил пример таблицы Excel. Мне нужно, чтобы по нажатию кнопки (условно кнопка "Импорт") в форме, автоматом переносились определенные ячейки в атрибуты определенной таблицы. Например, ячейка R4C2 (2015/2016) в n-ную таблицу в атрибут Учебный год.
Вложения
Тип файла: xlsx Sample.xlsx (9.5 Кб, 53 просмотров)
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 00:13
А что такое n-ная таблица, извините?
1
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 00:17  [ТС]
Любая определенная таблица, дабы не уточнять название так написал.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 00:28
Visual Basic Скопировано
1
2
3
4
5
dim strSQL as string
strSQL = "INSERT INTO ИмяТаблицы (Учебный год) SELECT F2 "
strSQL = strSQL & "FROM [Лист1$] IN 'C:\путь\Sample.xlsx'[Excel 12.0 XML; HDR=No;] "
strSQL = strSQL & "WHERE F1='Учебный год'"
currentdb.execute strSQL
Добавлено через 1 минуту
Но вообще импортировать по одной ячейке это.... нерационально )))
0
Эксперт MS Access
26820 / 14500 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.02.2016, 00:47
В запросе можно считывать и определенные ячейки, блоки и даже по нескольку штук единовременно. Но стиль ссылок обычный - не R1C1, А1:А1. Воспользуясь примером texnik-san:
SQL Скопировано
1
2
SELECT *
FROM [Лист1$B4:B4] AS x1, [Лист1$C4:D6] AS x2 IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Если одиночных ячеек много и расположение их нерегулярно, то гораздо эффективнее воспользоваться средствами автоматизации: открыть ексель, гулять по листу и писать в рекордсет таблицы.
Visual Basic Скопировано
1
2
3
4
5
6
7
8
9
10
11
Dim app as object, wrk as object
dim rst as dao.recordset
set rst=currentdb.openrecordset("select * from [n-я таблица]")
set app=createobject("excel.application")
set wrk=app.workbooks.open("путь\имяфайла.xls")
rst.addnew
rst![Учебный год]=range("C4")
rst![Другое поле]=range("F16")
...................................
rst.update
app.quit
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 01:06  [ТС]
Каждый раз одни и те же ячейки будут импортироваться, целью является автоматизировать эти действия.
А данный код где нужно прописывать? В кнопку вставил (где VBA код), вышло сообщение: "Ошибка 3134. Ошибка синтаксиса."
Visual Basic Скопировано
1
2
3
4
5
6
7
8
9
Private Sub Кнопка3_Click()
 
Dim strSQL As String
strSQL = "INSERT INTO Список образовательных программ (Учебный год) SELECT F2"
strSQL = strSQL & "FROM [Лист1$] IN 'D:\DB\Sample.xlsx'[Excel 12.0 XML; HDR=No;]"
strSQL = strSQL & "WHERE F1='Учебный год'"
CurrentDb.Execute strSQL
 
End Sub
Добавлено через 13 минут
Спасибо! Вот это мне нужно: "Если одиночных ячеек много и расположение их нерегулярно, то гораздо эффективнее воспользоваться средствами автоматизации: открыть ексель, гулять по листу и писать в рекордсет таблицы."
Попробовал, вышла ошибка, выделяя "range": "sub or function not defined".

Добавлено через 1 минуту
На данный код:
Visual Basic Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Кнопка3_Click()
 
Dim app As Object, wrk As Object
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("select * from [Список образовательных программ]")
Set app = CreateObject("excel.application")
Set wrk = app.workbooks.Open("D:\DB\Sample.xlsx")
rst.AddNew
rst![Учебный год] = range("C4")
 
rst.Update
app.Quit
 
 
End Sub
0
Эксперт MS Access
26820 / 14500 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.02.2016, 01:08
Ошибочка вышла. Забыл про родителей. А это всегда чревато
Visual Basic Скопировано
1
2
rst![Учебный год]=app.range("C4")
rst![Другое поле]=app.range("F16")
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 01:25  [ТС]
А объясните пожалуйста для чего нужна вторая строка в данном случае, или это просто как продолжение Вы написали?
Visual Basic Скопировано
1
rst![Другое поле]=app.range("F16")
Добавлено через 8 минут
Сейчас ошибок не выдается, но и не копируется ячейка R4C2. В атрибуте таблицы появляется новая запись, но она пуста.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 01:59
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
вышло сообщение: "Ошибка 3134. Ошибка синтаксиса."
Потому что нужно по-человечески отвечать на просьбу уточнить имя таблицы. У вас в имени таблицы пробелы, такие имена нужно брать в квадратные скобки:

SQL Скопировано
1
INSERT INTO [Список образовательных программ (Учебный год)] SELECT
Добавлено через 1 минуту
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
Сейчас ошибок не выдается, но и не копируется ячейка R4C2. В атрибуте таблицы появляется новая запись, но она пуста.
Дык вы зачем-то С4 копируете, а нужна В4
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 14:15  [ТС]
Спасибо большое, разобрался!
А не знаете как можно импортировать этим методом (rst![Учебный год]=app.range("B4")) или другим vba кодом определенную часть символов из ячейки? Например, есть ячейка с содержимым "2012/2013", нужно импортировать только первые 4 символа или, наоборот, последние 4 символа.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 15:10
Left(app.range("B4"),4)
Right(app.range("B4"),4)
1
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 15:37  [ТС]
Спасибо!
0
Эксперт MS Access
 Аватар для alvk
7455 / 4588 / 302
Регистрация: 12.08.2011
Сообщений: 14,347
08.02.2016, 07:28
Цитата Сообщение от texnik-san Посмотреть сообщение
Но вообще импортировать по одной ячейке это.... нерационально )))
Это одинэснуто.

Добавлено через 2 минуты
INSERT INTO [Список учебных обще-образовательных программ на Учебный год средне-технического образовательного учреждения в редакции профессора Петренко Ильи Михайловича, созданный в начале 2015 учебного года и согласованный со всеми необходимыми инстанциями] SELECT
__................
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
11.02.2016, 12:21  [ТС]
Добрый день, появился еще схожий вопрос. Возможно ли из ячейки таблицы Excel как-то импортировать информацию, находящуюся между символов?
1. Например, из ячейки с содержимым "бакалавриат, 3 курс" импортировать только цифру "3".
2. Или из ячейки "Студент: Иванов Иван Иванович", брать только "Иванов Иван Иванович", но только каким-то иным способом нежели здесь
PureBasic Скопировано
1
Right(app.range("B4"),20)
, т.к. ФИО всегда будут разниться в количестве символов, можно сделать, например, чтобы импортировались последующие символы после символов "Студент: "?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.02.2016, 12:41
Replace("app.range("B4")","Студент: ","")
1
 Аватар для Kkarn
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.02.2016, 12:42
Ivan_Ivanovich, Это вам нужно поиграться с текстовыми функциями VBA, такими как InStr, Mid, Replace и т.п. Составить конструкцию, которая бы забирала нужный фрагмент, не так и сложно, главное - четкий алгоритм...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2016, 12:42
Помогаю со студенческими работами здесь

Импорт данных из Excel в Access
При импорте нескольких страниц таблицы в базу (использовалась возможность связывания) не проставились первичные ключи. Вручную их...

импорт данных из Excel в Access
Добрый день форумчане, очень нужна ваша поддержка, у меня такой вопрос: Как можно импортировать данные из Excel в Access, в которой уже...

Импорт данных из Access в Excel
Доброго времени суток, подскажите пожалуйста, как можно осуществить импорт данных из Access в Excel причем не стандартным импортом и не...

Импорт данных в Excel из Access
Суть вопроса в том что есть клиент базы (база данных разделена) и иксель файл который используется в работе. Необходимо обеспечить...

Импорт данных из Excel в Access
Добрый день. Я недавно сел за Access. У меня возник вопрос: Как можно импортировать данные из Excel в Access, в которой уже есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как использовать Behavior Graph в Unity при создании игрового AI
GameUnited 14.04.2025
Искусственный интеллект в играх прошел долгий путь эволюции. От простейших алгоритмов, движущих призраками в Pac-Man, до сложных систем, управляющих поведением персонажей в современных AAA-проектах. . . .
Создание и стилизация списков в SwiftUI
mobDevWorks 14.04.2025
Списки — фундаментальный элемент мобильных интерфейсов. От списка контактов до ленты новостей, от настроек до каталога товаров — трудно представить приложение, которое не использовало бы этот. . .
Паттерн SAGA и распределённые транзакции в микросервисной архитектуре
stackOverflow 14.04.2025
Переход от монолитной архитектуры к микросервисам принес множество преимуществ: гибкость разработки, независимость развертывания и масштабирования отдельных компонентов. Однако этот переход создал и. . .
Кастомные аллокаторы в C++ и оптимизация управления памятью
bytestream 14.04.2025
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука. . .
Организация сетей в Kubernetes и эффективное развертывание
Mr. Docker 14.04.2025
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой. . .
Многопоточность в Rust: Fearless concurrency и практические примеры
golander 14.04.2025
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти. . .
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер