Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сбор данных из нескольких файлов xml - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сбор данных из нескольких файлов xml (Макросы/Sub)
Сбор данных из нескольких файлов xml
meiv Дата: Среда, 29.04.2015, 12:51 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Прошелся поиском по форуму, прочел все что нашел, но свой вопрос остался не решен.
Суть: Есть множество файлов xml с данными (каждый файл - 48 строк данных за 1 сутки (1 строка - получас), всего файлов - за год - в 12 папках по 28-31 файлу в каждой папке соответственно кол-ву дней в месяце).
Нужно со всех этих файлов данные собрать в 1 файл xls с 12 листами - месяцами, т.е., например на листе "январь" должны быть данные из 31 файла xml из папки "январь".
Данные расположить в форме первоначальной таблицы, но за все дни месяца в одной.

В идеале хотелось бы объединить 2 строки в одну, с суммированием значений в столбце "value", т.е. сделать из получасовых данных - часовые (24 за сутки)
К сообщению приложен файл: 80020_027300832.xml (94.2 Kb)
 
Ответить
СообщениеДобрый день!
Прошелся поиском по форуму, прочел все что нашел, но свой вопрос остался не решен.
Суть: Есть множество файлов xml с данными (каждый файл - 48 строк данных за 1 сутки (1 строка - получас), всего файлов - за год - в 12 папках по 28-31 файлу в каждой папке соответственно кол-ву дней в месяце).
Нужно со всех этих файлов данные собрать в 1 файл xls с 12 листами - месяцами, т.е., например на листе "январь" должны быть данные из 31 файла xml из папки "январь".
Данные расположить в форме первоначальной таблицы, но за все дни месяца в одной.

В идеале хотелось бы объединить 2 строки в одну, с суммированием значений в столбце "value", т.е. сделать из получасовых данных - часовые (24 за сутки)

Автор - meiv
Дата добавления - 29.04.2015 в 12:51
SLAVICK Дата: Среда, 29.04.2015, 15:26 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Как то так.
Распакуйте архив.
Положите все свои файлы в папку XML.
Нажмите кнопку на 2-м листе.
Макрос соберет данные на 2-й лист.
Потом можно сделать сводную.

Дальше в сводной делаете нужный вам отчет.
К сообщению приложен файл: 8892197.rar (30.5 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Среда, 29.04.2015, 15:41
 
Ответить
СообщениеКак то так.
Распакуйте архив.
Положите все свои файлы в папку XML.
Нажмите кнопку на 2-м листе.
Макрос соберет данные на 2-й лист.
Потом можно сделать сводную.

Дальше в сводной делаете нужный вам отчет.

Автор - SLAVICK
Дата добавления - 29.04.2015 в 15:26
meiv Дата: Четверг, 30.04.2015, 06:09 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK
Спасибо, все работает!
Простите за мою лень, а можно сделать так чтобы собирал сразу за год на отдельные листочки, а не по одному месяцу?
И перевести получас в час...


AndreTM

файл именно тот, точнее это один из файлов с которых нужно собрать данные. Прикладываю архив с каталогами.
К сообщению приложен файл: 5723103.zip (65.1 Kb)


Сообщение отредактировал meiv - Четверг, 30.04.2015, 06:21
 
Ответить
СообщениеSLAVICK
Спасибо, все работает!
Простите за мою лень, а можно сделать так чтобы собирал сразу за год на отдельные листочки, а не по одному месяцу?
И перевести получас в час...


AndreTM

файл именно тот, точнее это один из файлов с которых нужно собрать данные. Прикладываю архив с каталогами.

Автор - meiv
Дата добавления - 30.04.2015 в 06:09
SLAVICK Дата: Четверг, 30.04.2015, 18:29 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Можно, но зачем?
У Вас все данные будут собраны на один лист - дальше можно легко добавить нужные формулы(если нужно) и сделать сводную за весь период сразу А дальше из нее делать нужные отчеты.
Если данные будут на разных листах - то будет сложнее делать итоговые отчеты.

Может Вы имели ввиду сразу со всех подпапок? - можно допилить макрос, но можно просто в папку ХML скинуть сразу все файлы с всех месяцев - они же названы по разному.

Сделайте краткий пример того что-бы Вы хотели получить в итоге. А дальше будет видно.
И перевести получас в час...

Макрос просто собирает информацию с Ваших файлов - ничего не переделывает. Можно сделать сводную на основе полученных данных - и ее привести в тот вид, который нужно.

ЗЫ
Я ответить смогу только после 5-го числа - праздники на носу :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 30.04.2015, 18:36
 
Ответить
СообщениеМожно, но зачем?
У Вас все данные будут собраны на один лист - дальше можно легко добавить нужные формулы(если нужно) и сделать сводную за весь период сразу А дальше из нее делать нужные отчеты.
Если данные будут на разных листах - то будет сложнее делать итоговые отчеты.

Может Вы имели ввиду сразу со всех подпапок? - можно допилить макрос, но можно просто в папку ХML скинуть сразу все файлы с всех месяцев - они же названы по разному.

Сделайте краткий пример того что-бы Вы хотели получить в итоге. А дальше будет видно.
И перевести получас в час...

Макрос просто собирает информацию с Ваших файлов - ничего не переделывает. Можно сделать сводную на основе полученных данных - и ее привести в тот вид, который нужно.

ЗЫ
Я ответить смогу только после 5-го числа - праздники на носу :D

Автор - SLAVICK
Дата добавления - 30.04.2015 в 18:29
krosav4ig Дата: Суббота, 02.05.2015, 16:17 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
meiv, может вы все-таки покажете excel файл с примером желаемого результата?


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеmeiv, может вы все-таки покажете excel файл с примером желаемого результата?

Автор - krosav4ig
Дата добавления - 02.05.2015 в 16:17
no_brain Дата: Четверг, 05.04.2018, 18:39 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день!

столкнулся с необходимостью свести большое к-во файлов XML в одну таблицу на одном листе (похожая на таблицу в первом посте) - они одинакового формата, с одинаковым к-вом строк и столбцов.
с макросами толком не работал - прошу вашей помощи.
К сообщению приложен файл: 210_.7z (62.0 Kb)
 
Ответить
СообщениеДобрый день!

столкнулся с необходимостью свести большое к-во файлов XML в одну таблицу на одном листе (похожая на таблицу в первом посте) - они одинакового формата, с одинаковым к-вом строк и столбцов.
с макросами толком не работал - прошу вашей помощи.

Автор - no_brain
Дата добавления - 05.04.2018 в 18:39
SLAVICK Дата: Пятница, 06.04.2018, 09:14 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
столкнулся с необходимостью свести

вы мой пример со 2-го поста смотрели?
он чудно собирает данные с ваших примеров. Все что нужно - это положить свои файлы в папку ХML, нажать кнопку и подождать пару минут...


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
столкнулся с необходимостью свести

вы мой пример со 2-го поста смотрели?
он чудно собирает данные с ваших примеров. Все что нужно - это положить свои файлы в папку ХML, нажать кнопку и подождать пару минут...

Автор - SLAVICK
Дата добавления - 06.04.2018 в 09:14
Annushka Дата: Среда, 06.06.2018, 17:30 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, приветствую!
Воспользовалась Вашим примером для сбора xml в один xls.
Выдает ошибку: "Невозможно выполнить операцию, поскольку ее результат будет прерывать существующее сопоставление XML" 1004.
Срока ThisWorkbook.XmlImport URL:=f, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")

Подскажите, пожалуйста, в чем причина и как исправить? :'(
Пример файлов во вложении.
К сообщению приложен файл: test.rar (73.3 Kb)
 
Ответить
СообщениеSLAVICK, приветствую!
Воспользовалась Вашим примером для сбора xml в один xls.
Выдает ошибку: "Невозможно выполнить операцию, поскольку ее результат будет прерывать существующее сопоставление XML" 1004.
Срока ThisWorkbook.XmlImport URL:=f, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")

Подскажите, пожалуйста, в чем причина и как исправить? :'(
Пример файлов во вложении.

Автор - Annushka
Дата добавления - 06.06.2018 в 17:30
SLAVICK Дата: Четверг, 07.06.2018, 16:22 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
поскольку ее результат будет прерывать существующее сопоставление XML" 1004.

где то я это уже слышал...
есть такой момент, связано с багом Excel при разборе схемы.
Решается относительно легко при помощи удаления-создания листа.
См. пример - там это сделано + добавил в статусную строку статус выполнения
[vba]
Код
Sub pusk()
Dim r As Range, f$, n&, n1&, i%, d As Object
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim SH As Worksheet
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(ThisWorkbook.Path & "\xml")
Application.DisplayAlerts = False
On Error GoTo ERRH
For Each objFile In objFolder.Files
f = objFile.Path
    Sheets(1).Delete
    Sheets.Add
    ThisWorkbook.XmlImport URL:=f, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")
'удаление подключения
For Each d In ActiveWorkbook.Connections
d.Delete
Next
    n = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    n1 = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value
    i = i + 1
   Application.StatusBar = i
Next
Application.StatusBar = False
Sheets(2).Activate
Application.DisplayAlerts = True
Exit Sub
ERRH:
MsgBox "Error:" & vbLf & f
End Sub
[/vba]
К сообщению приложен файл: 0330027.xlsm (41.0 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
поскольку ее результат будет прерывать существующее сопоставление XML" 1004.

где то я это уже слышал...
есть такой момент, связано с багом Excel при разборе схемы.
Решается относительно легко при помощи удаления-создания листа.
См. пример - там это сделано + добавил в статусную строку статус выполнения
[vba]
Код
Sub pusk()
Dim r As Range, f$, n&, n1&, i%, d As Object
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim SH As Worksheet
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(ThisWorkbook.Path & "\xml")
Application.DisplayAlerts = False
On Error GoTo ERRH
For Each objFile In objFolder.Files
f = objFile.Path
    Sheets(1).Delete
    Sheets.Add
    ThisWorkbook.XmlImport URL:=f, ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")
'удаление подключения
For Each d In ActiveWorkbook.Connections
d.Delete
Next
    n = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    n1 = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value
    i = i + 1
   Application.StatusBar = i
Next
Application.StatusBar = False
Sheets(2).Activate
Application.DisplayAlerts = True
Exit Sub
ERRH:
MsgBox "Error:" & vbLf & f
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 07.06.2018 в 16:22
Annushka Дата: Четверг, 07.06.2018, 16:40 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, спасибо!
Вроде получается, только вот как расширить диапазон столбцов в листе "Сбор" (сейчас там до Q)?
А мне нужны данные из середины - c AH по AR.
 
Ответить
СообщениеSLAVICK, спасибо!
Вроде получается, только вот как расширить диапазон столбцов в листе "Сбор" (сейчас там до Q)?
А мне нужны данные из середины - c AH по AR.

Автор - Annushka
Дата добавления - 07.06.2018 в 16:40
SLAVICK Дата: Четверг, 07.06.2018, 16:58 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
расширить диапазон столбцов в листе "Сбор" (сейчас там до Q)?

Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value

Меняйте на AH по AR


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
расширить диапазон столбцов в листе "Сбор" (сейчас там до Q)?

Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value

Меняйте на AH по AR

Автор - SLAVICK
Дата добавления - 07.06.2018 в 16:58
Annushka Дата: Четверг, 07.06.2018, 17:48 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, :( работает, но пропадает одна строка из одного файла.
В первом файле 671 строк
в 2м = 1 срока
в 3м = 3 строки
Итого должно быть 675 строк.
А в своде 674 :(

Если обрабатываю только 2 файла, то кол-во строк правильное...Не пойму в чем проблема %)
 
Ответить
СообщениеSLAVICK, :( работает, но пропадает одна строка из одного файла.
В первом файле 671 строк
в 2м = 1 срока
в 3м = 3 строки
Итого должно быть 675 строк.
А в своде 674 :(

Если обрабатываю только 2 файла, то кол-во строк правильное...Не пойму в чем проблема %)

Автор - Annushka
Дата добавления - 07.06.2018 в 17:48
SLAVICK Дата: Пятница, 08.06.2018, 09:23 | Сообщение № 13
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
В первом файле 671 строк

Это с шапкой, или без?
Макрос собирает строки без шапки, еще как вариант - пустая ячейка в первом столбце - попробуйте заменить строку
[vba]
Код
n = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
[/vba]
на
[vba]
Код
n = Sheets(1).UsedRange.Rows.Count
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
В первом файле 671 строк

Это с шапкой, или без?
Макрос собирает строки без шапки, еще как вариант - пустая ячейка в первом столбце - попробуйте заменить строку
[vba]
Код
n = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
[/vba]
на
[vba]
Код
n = Sheets(1).UsedRange.Rows.Count
[/vba]

Автор - SLAVICK
Дата добавления - 08.06.2018 в 09:23
Annushka Дата: Пятница, 08.06.2018, 09:59 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, строки считала без шапки.
Почему-то при СБОРЕ по файлу, где фактически 3 строки, отражается только 2.
Файл на 14Кб.

К сожалению, замена строки в коде не помогла((
 
Ответить
СообщениеSLAVICK, строки считала без шапки.
Почему-то при СБОРЕ по файлу, где фактически 3 строки, отражается только 2.
Файл на 14Кб.

К сожалению, замена строки в коде не помогла((

Автор - Annushka
Дата добавления - 08.06.2018 в 09:59
Annushka Дата: Пятница, 08.06.2018, 10:02 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, при чем когда беру только 2 файла из этой группы - все нормально, строки все.
 
Ответить
СообщениеSLAVICK, при чем когда беру только 2 файла из этой группы - все нормально, строки все.

Автор - Annushka
Дата добавления - 08.06.2018 в 10:02
SLAVICK Дата: Пятница, 08.06.2018, 10:21 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Файл на 14Кб.

размер тут не имеет значения.
где фактически 3 строки, отражается только 2

Где отображается?
Т.е. из файла открывается 2е строки или копируется? Возможно некорректное построение XML. Нужно смотреть файл и сравнивать его с корректным


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Файл на 14Кб.

размер тут не имеет значения.
где фактически 3 строки, отражается только 2

Где отображается?
Т.е. из файла открывается 2е строки или копируется? Возможно некорректное построение XML. Нужно смотреть файл и сравнивать его с корректным

Автор - SLAVICK
Дата добавления - 08.06.2018 в 10:21
Annushka Дата: Пятница, 08.06.2018, 10:22 | Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, это может быть связано с тем, что в файлах объемом 1 срока, нет шапки?
Пробовала собирать только такие файлы (1 срочные), ничего не выходит - в сборе результат только по последнему файлу(((
Но когда обрабатываю такие 1 срочные файлы вместе с "большими", сбор работает.
 
Ответить
СообщениеSLAVICK, это может быть связано с тем, что в файлах объемом 1 срока, нет шапки?
Пробовала собирать только такие файлы (1 срочные), ничего не выходит - в сборе результат только по последнему файлу(((
Но когда обрабатываю такие 1 срочные файлы вместе с "большими", сбор работает.

Автор - Annushka
Дата добавления - 08.06.2018 в 10:22
Annushka Дата: Пятница, 08.06.2018, 10:30 | Сообщение № 18
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK,
Где отображается?
Т.е. из файла открывается 2е строки или копируется? Возможно некорректное построение XML. Нужно смотреть файл и сравнивать его с корректным

В вкладке сбор, после запуска макроса. Смотрю строки по этому файлу и их 2 шт.
Когда сам файл отдельно открываю экселем, там 3 строки.
 
Ответить
СообщениеSLAVICK,
Где отображается?
Т.е. из файла открывается 2е строки или копируется? Возможно некорректное построение XML. Нужно смотреть файл и сравнивать его с корректным

В вкладке сбор, после запуска макроса. Смотрю строки по этому файлу и их 2 шт.
Когда сам файл отдельно открываю экселем, там 3 строки.

Автор - Annushka
Дата добавления - 08.06.2018 в 10:30
SLAVICK Дата: Пятница, 08.06.2018, 10:33 | Сообщение № 19
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
что в файлах объемом 1 срока, нет шапки?

конечно - так и есть.
Я же писал
Это с шапкой, или без?
Макрос собирает строки без шапки, е

Если у вас чередуются файлы с шапкой и без - это плохо. Обойти можно - собирая все строки, включая шапку - а потом вручную удалять строки с шапкой, или удалять дубликаты(второй вариант на всегда допустим.)
чтобы собирать с шапкой меняйте строку:
[vba]
Код
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value
[/vba] на
[vba]
Код
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 1).Value = Sheets(1).Range("a1:q" & n).Value
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
что в файлах объемом 1 срока, нет шапки?

конечно - так и есть.
Я же писал
Это с шапкой, или без?
Макрос собирает строки без шапки, е

Если у вас чередуются файлы с шапкой и без - это плохо. Обойти можно - собирая все строки, включая шапку - а потом вручную удалять строки с шапкой, или удалять дубликаты(второй вариант на всегда допустим.)
чтобы собирать с шапкой меняйте строку:
[vba]
Код
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 2).Value = Sheets(1).Range("a2:q" & n).Value
[/vba] на
[vba]
Код
    Sheets(2).Range("a" & n1 & ":q" & n1 + n - 1).Value = Sheets(1).Range("a1:q" & n).Value
[/vba]

Автор - SLAVICK
Дата добавления - 08.06.2018 в 10:33
Annushka Дата: Пятница, 08.06.2018, 10:45 | Сообщение № 20
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
SLAVICK, поменяла код, как Вы сказали, чтобы сбор был с шапками. Затем удаляю их ручками.
ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ! ДАЙ БОГ ВАМ ЗДОРОВЬЯ! :) hands
 
Ответить
СообщениеSLAVICK, поменяла код, как Вы сказали, чтобы сбор был с шапками. Затем удаляю их ручками.
ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ! ДАЙ БОГ ВАМ ЗДОРОВЬЯ! :) hands

Автор - Annushka
Дата добавления - 08.06.2018 в 10:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сбор данных из нескольких файлов xml (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!