Страницы: 1
RSS
Много XML-файлов - импорт в один Excel
 
Добрый вечер!
Прошу помочь в следующем вопросе.
Имеется папка с несколькими тысячами xml-файлов. Пример одного прилагается. Структура всех файлов одинаковая.
Можно ли как-то повытаскивать данные из этих xml в одну таблицу Excel?
Какие могут быть варианты?
Спасибо!
 
А какие данные надо вытащить? Из какого элемента?
There is no knowledge that is not power
 
Из следующих тегов:
<B110>
<B130>
<B140>
<B210>
<B220>
<ru-b405>
<ru-b460i>
<ru-b903i>
<ru-b994i>
 
Доброе время суток
Можете воспользоваться следующим алгоритмом
1. Создаёте объект xml-документа CreateObject("MSXML2.DOMDocument")
2. создаёте fso-объект CreateObject("Scripting.FileSystemObject")
3. Получаете ссылку на папку через GetFolder
4. Создаёте массив вывода на лист числом столбцов по требуемым данным, а числом строк - по числу файлов, предполагаю, что один файл одна строка таблицы Excel.
5. Цикл по файлам папки
6. Для каждого файла, если его расширение xml
7. Через Load объекта документа загружаете данные
8. Через SelectSingleNode("/ru-patent-document"), прописывая путь к узлу (в примере к коренвому) получаете ссылку на требуемый узел
9. Если объект не Nothing, то по свойству Text получаете значение и записываете в текущую строку в соответствующий столбец массива вывода
10. По окончании цикла, записываете массив на лист и формируете строку названий столбцов на листе.

Проблемы, нужно держать в папке dtd-файл определения схемы ru-patent-document-v1-4.dtd, если его не будет, то DOMDocument не сможет прочитать данные. Можно обойти, предварительно макросом, используя ADODB.Stream, считать в строку все данные и, удаляя строку определения <!DOCTYPE ru-patent-document SYSTEM "ru-patent-document-v1-4.dtd"> в ней, загружать её в объект документа через LoadXML

Как вариант, можно использовать Power Query, он может считывать данные xml без наличия файла схемы в папке.

Успехов.
 
Спасибо!

А как это выглядит в коде?
 
Цитата
kolesik2 написал:
А как это выглядит в коде?
Если вам так любопытно, но тяжело найти список всех файлов в папке vba, чтение xml-файла vba, смена кодировки текста vba через adodb stream. Думаю, описание функции InStr вы найдёте сами по аналогии.

Успехов.
Изменено: Андрей VG - 17.12.2015 08:30:30
 
Цитата
Какие могут быть варианты?
вариантов множество, например:
1) перебрать все файлы, и вручную скопировать данные в таблицу
2) найти в инете подходящий макрос, доработать его под свои файлы
3) написать макрос самому, воспользовавшись советами Андрея выше
4) заказать спецам разработку макроса

Что касается пункта 2, - у меня есть готовая программа (парсер сайтов и файлов), которую можно настроить под вашу задачу, без единой строки кода
http://excelvba.ru/programmes/Parser
Там надо несколько действий настроить:
1) получить список файлов в папке
2) загрузить текст из файла
3) выборка XML (по шаблону типа //B110) - для каждого из столбцов свой шаблон

Программа платная, - но тестового (бесплатного) периода вам вполне хватит, чтобы самостоятельно разобраться, настроить, и загрузить все данных из XML в таблицу Excel
 
Можно написать простенькую программу на C#.
There is no knowledge that is not power
Страницы: 1
Читают тему
Наверх
Loading...