Импорт xml-файла в существующую таблицу Excel через VBA - PullRequest
0 голосов
/ 07 января 2019

У меня довольно большой xml-файл, который я хочу импортировать в существующий файл Excel, на конкретный лист. Мой собственный код довольно вялый. Я пытался использовать метод openXml, но это приводит к неиспользуемому выводу

Код, который я пробовал (и работает, но он очень медленный), указан здесь. XML-файл содержит около 10000 элементов, для каждого элемента есть еще 22 значения, которые мне нужны. Если я запускаю этот код, Excel занимает около 2 или 3 минут, чтобы поместить все данные в таблицу, что не совсем приемлемо.

Сам файл немного плохо отформатирован, с двумя отдельными xml-списками в один xml-файл. Я не могу контролировать это достаточно печально.

Я также пытался использовать опцию workbook.openXML, но она сталкивается с двумя различными структурами xml, которые находятся в исходном файле, что делает его довольно непригодным для меня, если я не трачу больше времени на очистку этой таблицы, но это не действительно аккуратное решение.

(я не разместил здесь XML, так как это данные компании).

XDoc.Load (strPath)

Set inputXML = XDoc.SelectNodes("//<nodes_i_need>")

xmllengte = Int(inputXML.Length)
ReDim listinputXML(xmllengte, 22)
xmlTeller = 0

For Each element In inputXML:
    listinputXML(xmlTeller, 0) = element.ChildNodes(0).Text
    listinputXML(xmlTeller, 1) = element.ChildNodes(1).Text
    listinputXML(xmlTeller, 2) = element.ChildNodes(2).Text
    listinputXML(xmlTeller, 3) = element.ChildNodes(3).Text
    listinputXML(xmlTeller, 4) = element.ChildNodes(4).Text
    listinputXML(xmlTeller, 5) = element.ChildNodes(5).Text
    listinputXML(xmlTeller, 6) = element.ChildNodes(6).Text
    listinputXML(xmlTeller, 7) = element.ChildNodes(7).Text
    listinputXML(xmlTeller, 8) = element.ChildNodes(8).Text
    listinputXML(xmlTeller, 9) = element.ChildNodes(9).Text
    listinputXML(xmlTeller, 10) = element.ChildNodes(10).Text
    listinputXML(xmlTeller, 11) = element.ChildNodes(11).Text
    listinputXML(xmlTeller, 12) = element.ChildNodes(12).Text
    listinputXML(xmlTeller, 13) = element.ChildNodes(13).Text
    listinputXML(xmlTeller, 14) = element.ChildNodes(14).Text
    listinputXML(xmlTeller, 15) = element.ChildNodes(15).Text
    listinputXML(xmlTeller, 16) = element.ChildNodes(16).Text
    listinputXML(xmlTeller, 17) = element.ChildNodes(17).Text
    listinputXML(xmlTeller, 18) = element.ChildNodes(18).Text
    listinputXML(xmlTeller, 19) = element.ChildNodes(19).Text
    listinputXML(xmlTeller, 20) = element.ChildNodes(20).Text
    listinputXML(xmlTeller, 21) = element.ChildNodes(21).Text

    xmlTeller = xmlTeller + 1
Next element

Sheets("testing").Range("A2", CStr("V" & inputXML.Length)) = listinputXML
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...