通过VBA将XML文件导入到现有的Excel工作表

时间:2019-01-07 12:49:53

标签: excel xml vba

我有一个相当大的xml文件,我想将其导入到现有的excelfile中,并导入到特定的工作表中。我自己的代码很慢。我尝试使用openXml方法,但这会产生不可用的输出

这里列出了我尝试过的代码(可以运行,但是速度很慢)。 XML文件包含大约10000个项目,每个项目都有我需要的其他22个值。如果我运行此代码,excel将花费大约2或3分钟的时间将所有数据放入工作表,这实际上是不可接受的。

文件本身的格式有点差,将两个单独的xml列表合并为一个xml文件。可悲的是,我对此无能为力。

我也尝试过使用workbook.openXML-option,但这偶然发现了源文件中的两个不同的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

0 个答案:

没有答案