Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
1

Обработка данных Excel документа, реально ли обработать такую структуру данных?

05.04.2011, 13:16. Показов 2865. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Посоветуйте ход решения задачи. Необходимо написать обработку которая будет экспортировать данные из Excel документа в базу данных. На скриншоте предоставлена структура документа.

Формат полей в базе данных должен быть следующего формата:
[Имя файла],[Имя листа], A1, B1, C1, D1, E1
[Имя файла],[Имя листа], A2, B2, C2, D3, E1
[Имя файла],[Имя листа], A3, B3, C3, D5, E1
[Имя файла],[Имя листа], A4, B3, C4, D7, E1

В общем алгоритм уже примерно ясен. Но по нему, выходят уж очень ненадежные костыли. Думаю может кто поделиться советом, как это будет проще и оптимальнее сделать. Заранее спасибо.
Миниатюры
Обработка данных Excel документа, реально ли обработать такую структуру данных?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2011, 13:16
Ответы с готовыми решениями:

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

Обработка Загрузка данных из табличного документа
Добрый день! Работаем с УТ 11, с обычными формами. С диска ИТС взяли обработку:” Загрузка данных...

Обработка текстового документа с выводом данных в директорию
Добрый день, первый день на баше, пока изучаю Есть одна задачка : Например, в текстовом файле...

Перенос данных из Excel документа
Всем доброго времени суток! В общем, суть заключается в следующем: для переноса данных я создал...

12
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 14:35 2
Формат полей в базе данных должен быть следующего формата:
[Имя файла],[Имя листа], A1, B1, C1, D1, E1
[Имя файла],[Имя листа], A2, B2, C2, D3, E1
[Имя файла],[Имя листа], A3, B3, C3, D5, E1
[Имя файла],[Имя листа], A4, B3, C4, D7, E1
1. Это пример 4-х записей в одной таблице или данные надо распихать по 4-м разным таблицам с похожей структурой?
2. Имя файла включает ли оно путь к файлу и расширение?
3. Какой будет принцип выбора данных для добавления в базу: пакетом файлов сразу или будешь выбирать по одному листу книги Excel?
4. Ограничены ли исх. данные колонками L, M, как на скриншоте или это можно как-то определить по содержимому?
5. Есть уже какие-то наработки по коду?
6. Какая версия Office используется?
Могу взяться и сделать все "под ключ" после ответа на эти и ещё пару уточняющих вопросов,
mc-black@yandex.ru (за небольшое вознаграждение).
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
05.04.2011, 14:46  [ТС] 3
Цитата Сообщение от mc-black Посмотреть сообщение
1. Это пример 4-х записей в одной таблице или данные надо распихать по 4-м разным таблицам с похожей структурой?
2. Имя файла включает ли оно путь к файлу и расширение?
3. Какой будет принцип выбора данных для добавления в базу: пакетом файлов сразу или будешь выбирать по одному листу книги Excel?
4. Ограничены ли исх. данные колонками L, M, как на скриншоте или это можно как-то определить по содержимому?
5. Есть уже какие-то наработки по коду?
6. Какая версия Office используется?
Могу взяться и сделать все "под ключ" после ответа на эти и ещё пару уточняющих вопросов,
mc-black@yandex.ru (за небольшое вознаграждение).
1. Пример записей в одну таблицу.
2. Нет, путь не нужен.
3. Обработка будет перебирать все файлы в дериктории, а так же листы фала, один файл - одна таблица.
4. Нет не ограничены.
5. Кода еще нет, пока ищу оптимальный алгоритм решения.
6. 2003+2007.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 15:14 4
2003+2007
Это конечно забавно. Может выбрать что-то одно? База данных-то одна будет, в одном формате. Выполняющий макрос (внутри Excel или Access) тоже один и тоже определенной версии. Надо как-то унифицировать источники информации, а то так не дело. Лично мне удобней сейчас иметь дело с 2003, так как он установлен на работе и другой мне не поставить, разве что на домашний ПК. Вам удобней ту версию, которая установлена у Вас как лицензионная..
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
05.04.2011, 15:19  [ТС] 5
Ну давайте рассмотрим на примере 2003.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 15:22 6
По обработке информации не вижу ничего нерешаемого пока не вижу, порядок действий примерно следующий:
1. Вызов окна выбора папки.
2. Перебор в цикле всех файлов Excel подходящих условиям отбора (все или какая-то их часть).
3. Открытие книги Excel, поиск в ней нужного листа (по имени, по порядковому номеру, по содержимомму?).
4. Определение количества столбцов в таблице. Вычисляется граница, до которой находить и вставлять записи в базу.
5. Циклический перебор столбцов с шагом 2, получение данных для экспорта в базу.
6. Добавление записи в таблицу внутри базы Access по технологии ADO (или DAO, на выбор).

Ответьте на вопрос в п.3. Желательно вместо скрина дать упрощенный файл-пример с данными (любыми), который можно использовать для тестирования работы макроса, сделав несколько копий файла. С каким пунктом основные затруднения?))
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
05.04.2011, 16:13  [ТС] 7
Цитата Сообщение от mc-black Посмотреть сообщение
По обработке информации не вижу ничего нерешаемого пока не вижу, порядок действий примерно следующий:
1. Вызов окна выбора папки.
2. Перебор в цикле всех файлов Excel подходящих условиям отбора (все или какая-то их часть).
3. Открытие книги Excel, поиск в ней нужного листа (по имени, по порядковому номеру, по содержимомму?).
4. Определение количества столбцов в таблице. Вычисляется граница, до которой находить и вставлять записи в базу.
5. Циклический перебор столбцов с шагом 2, получение данных для экспорта в базу.
6. Добавление записи в таблицу внутри базы Access по технологии ADO (или DAO, на выбор).

Ответьте на вопрос в п.3. Желательно вместо скрина дать упрощенный файл-пример с данными (любыми), который можно использовать для тестирования работы макроса, сделав несколько копий файла. С каким пунктом основные затруднения?))
3. Все листы файла требуется перебрать последовательно во всех файлах, те искать не нужно, нужно определить сколько их, узнать их имена, так как имя будет частью инсерта в базу.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 16:30 8
Уверены, что во всей папке ни в однм файле не встретится листа, неподходящего под нужный формат? Может есть признаки корректности листа, чтобы отбрасывать все неподходящие листы? Пример файла Вы так и не выложили. Макрос на 80% написан, не на чем проверить.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
05.04.2011, 17:02  [ТС] 9
Цитата Сообщение от mc-black Посмотреть сообщение
Макрос на 80% написан, не на чем проверить.
Скинул в почту.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 17:14 10
Сейчас потестирую, не знаю как будет работать или нет.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
05.04.2011, 17:16  [ТС] 11
Цитата Сообщение от mc-black Посмотреть сообщение
Практически готово, но не на чем пробовать.
Всмысле базы нет? Устроит debug.writelen (с перечисленными элементами)
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
05.04.2011, 17:50 12
Код пока получается такой:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Option Explicit
 
Sub EnumWorkboorks()
    Dim fd As FileDialog, vrtSelectedItem As Variant, MyPath As String
    
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    
    If fd.Show = -1 Then
        For Each vrtSelectedItem In fd.SelectedItems
            MyPath = vrtSelectedItem
            If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"
            Call EnumFolder(MyPath)
        Next vrtSelectedItem
    End If
    
    Set fd = Nothing
End Sub
 
Private Sub EnumFolder(MyPath As String)
    Dim MyName As String, wbk As Workbook
    
    MyName = Dir(MyPath & "*.xls", vbNormal)
    Do While MyName <> ""
        If (GetAttr(MyPath & MyName) And vbNormal) = vbNormal Then
        If MyName Like "*.xls" Then
            Set wbk = Workbooks.Open(MyPath & MyName)
            
            Call EnumWorksheets(wbk)
            wbk.Close False
            
            Set wbk = Nothing
        End If
        End If
    MyName = Dir
    Loop
End Sub
 
Private Sub EnumWorksheets(wbk As Workbook)
    Dim wsh As Worksheet
    
    For Each wsh In wbk.Worksheets
        Call ExportData(wsh)
    Next
End Sub
 
Private Sub ExportData(wsh As Worksheet)
    Dim i As Long, m As Long
    
    For m = wsh.UsedRange.Column + wsh.UsedRange.Columns.Count - 1 To 1 Step -1
        If wsh.Columns(m).Text = "" Then Else Exit For
    Next
    
    For i = 2 To m Step 2
        InsertRecord _
            wsh.Parent.Name, _
            wsh.Name, _
            wsh.Cells(1, i).Value, _
            wsh.Cells(3, i).MergeArea.Cells(1).Value, _
            wsh.Cells(4, i).MergeArea.Cells(1).Value, _
            wsh.Cells(5, i).MergeArea.Cells(1).Value, _
            wsh.Cells(5, 1).Value
    Next
End Sub
 
Private Sub InsertRecord(F1 As String, F2 As String, F3 As Long, F4 As String, F5 As Long, F6 As Date, F7 As Long)
    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        ThisWorkbook.Path & "\base.mdb;User Id=admin;Password=;"
    cn.Open
    
    Set rs = New ADODB.Recordset
    rs.Open "INSERT INTO MyTab VALUES (""" & F1 & """, """ & F2 & """, " & F3 & ", """ & F4 & """, " & F5 & ", """ & Format(F6, "dd.mm.yyyy") & """, " & F7 & ")", cn, adOpenKeyset, adLockOptimistic
    
    Debug.Print F1, F2, F3, F4, F5, F6, F7
    
    cn.Close
    Set cn = Nothing
End Sub
Типы данных подгонял под твой пример файла. Выслал тебе книгу Excel, базу - соорудил сам, папку с двумя копиями твоего файла. Судя по всему перебор колонок надо начинать с со второй "B", а не с "F", как на скриншоте. Все то же самое прикрепляю висеть здесь на случай, если какая-то часть понадобится кому-то ещё.
Вложения
Тип файла: zip db_test.zip (36.5 Кб, 20 просмотров)
1
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 18
06.04.2011, 10:23  [ТС] 13
Отличный код, реквизиты для спасибо в почту плз)
0
06.04.2011, 10:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2011, 10:23
Помогаю со студенческими работами здесь

Обработка и изъятие данных из XML документа средствами PHP
Объясните работу обработки XML документа с помощью PHP Например: &lt;author&gt;А.С. Пушкин&lt;/author&gt; И...

Скопировать структуру базы данных в новую базу данных без самих данных
Здравствуйте! Подскажите пожалуйста, как более удобно скопировать всю базу данных в новую базу...

Загрузка данных из Excel в реквизиты документа
Здравствуйте, уважаемые форумчане. Есть программа, самописная, из нее выгружаются данные за период...

Создание документа MS Excel и запись данных
Собственно. Задача такая: Имеется стринговый массив. Нужно данные из этого массива по определенной...

Загрузка данных из табличного документа Excel
При открытии стандартной обработки (ИТС) выскакивает пустая форма!

Экспорт данных из 1С в шаблон документа Excel, Word
Итак скажем необходимо привести данные из 1С, к примеру реквизиты документа &quot;Приходная накладная&quot;...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru