问题描述
我有位VBA正在加载通过VBA的XML文件。然而,当它导入它是所有在一列中,而不是分成表中。
当我手动导入此通过数据标签我得到警告,没有模式,但也问我是否想Excel将基于源数据创建一个。然后,这会将所有的数据在一个不错的表。
我想这对我目前的VBA code的范围内自动发生:
VBA看起来像
子刷新()-------------------------------- 1。个人资料的ID -----------------------------------
日期变量昏暗start_period作为字符串
start_period =表(自动化)。将细胞(1,6)。价值
昏暗end_period作为字符串
end_period =表(自动化)。将细胞(1,7)。价值报告ID变量名
昏暗BusinessplanningReportID作为字符串-------------------------------- REST查询--------------- -----------------
昏暗Businessplanning作为字符串REST查询值
Businessplanning = \"URL;http://api.trucast.net/2/saved_searches/00000/pivot/content_volume_trend/?apikey=0000000&start=\" + start_period +&放大器;年底=+ end_period +&放大器;格式= XML
--------------------------------------------数据连接--- --------------------------------
关键指标
随着工作表(工作表Sheet1)QueryTables.Add。(连接:= Businessplanning,目的地:=工作表(工作表Sheet1),范围(A1)) .RefreshStyle = xlOverwriteCells
.SaveData = TRUE结束与
目前的数据,那么presents本身喜欢这个,非结构化的。我怎么能自动转成表呢?
<&结果GT;
<输入>
< published_date> 20130201< / published_date>
<&POST_COUNT GT; 18 LT; / POST_COUNT>
< /进入>
谢谢,
::最终的解决方案:
子XMLfromPPTExample2()
XDOC暗淡作为MSXML2.DOMDocument
昏暗xresult作为MSXML2.IXMLDOMNode
昏暗xentry作为MSXML2.IXMLDOMNode
昏暗xChild作为MSXML2.IXMLDOMNode
昏暗start_period作为字符串
start_period =表(自动化)。将细胞(1,6)。价值
昏暗end_period作为字符串
end_period =表(自动化)。将细胞(1,7)。价值
昏暗的WB作为工作簿
昏暗上校作为整数
昏暗行作为整数
XDOC设置=新MSXML2.DOMDocument
XDoc.async = FALSE
XDoc.validateOnParse =假
XDoc.Load(http://api.trucast.net/2/saved_searches/0000/pivot/content_volume_trend/?apikey=00000&start=+ start_period +&放大器;年底=+ end_period +&放大器;格式= XML)
LoadOption = xlXmlLoadImportToList设置xresult = XDoc.DocumentElement
设置xentry = xresult.FirstChild
列= 1
行= 1对于每个xentry在xresult.ChildNodes
行= 1
对于每个xChild在xentry.ChildNodes
工作表(Sheet2的)。电池(西,行).value的= xChild.Text
MSGBOX xChild.BaseName&安培; 与& xChild.Text
行=行+ 1
列=山口+ 1 接下来xChild
行=行+ 1
列=山口+ 1
接下来xentry结束小组
硬codeD方法是:
从这个出发
<&结果GT;
<输入>
< published_date> 20130201< / published_date>
<&POST_COUNT GT; 18 LT; / POST_COUNT>
< /进入>
<输入>
< published_date> 20120201< / published_date>
&所述; POST_COUNT→15&下; / POST_COUNT>
< /进入>
和你想获得一个excel两列:
** ** published_date | ** ** POST_COUNT
20130201 | 18
20120201 | 15
让我们可以假设,在你的XML,你将永远有
<$p$p><$c$c><result><entry><Element>VALUE</Element><Element...n>VALUE</Element...n></entry> 重要提示:
打开在PowerPoint,Excel中..字VBA编辑器并添加引用微软XML,3.0(这是引用了Office 2000 ...你可能有其他人)。
来源:http://vba2vsto.blogspot.it/2008/12/reading-xml-from-vba.html
Employee.XML
&LT;?XML版本=1.0编码=UTF-8独立=YES&GT?;
&LT; EmpDetails&GT;
&LT;员工&GT;
&LT;名称&gt;&ABC LT; /名称&gt;
&LT;&系GT;的IT软件和LT; /部门&GT;
&LT;地点&gt;新德里&LT; /地点&gt;
&LT; /员工与GT;
&LT;员工&GT;
&LT;名称&gt;&XYZ LT; /名称&gt;
&LT;&系GT;的IT软件和LT; /部门&GT;
&LT;地点&gt;&奈LT; /地点&gt;
&LT; /员工与GT;
&LT;员工&GT;
&LT;名称&gt;&IJK LT; /名称&gt;
&LT;&系GT;人力资源运营和LT; /部门&GT;
&LT;地点&gt;&班加罗尔LT; /地点&gt;
&LT; /员工与GT;
&LT; / EmpDetails&GT;
code到阅读上面XML
子XMLfromPPTExample()
XDOC暗淡作为MSXML2.DOMDocument
昏暗xEmpDetails作为MSXML2.IXMLDOMNode
昏暗xEmployee作为MSXML2.IXMLDOMNode
昏暗xChild作为MSXML2.IXMLDOMNodeXDOC设置=新MSXML2.DOMDocument
XDoc.async = FALSE
XDoc.validateOnParse =假
XDoc.Load(C:\\ Emp.xml)
设置xEmpDetails = XDoc.documentElement
设置xEmployee = xEmpDetails.firstChild
对于每个xEmployee在xEmpDetails.childNodes
对于每个xChild在xEmployee.childNodes
MSGBOX xChild.baseName&安培; 与&amp; xChild.Text
接下来xChild
接下来xEmployee
结束小组
在你的情况,当然,你需要适应你的日常:
plus any other necessary adjustment.
In this way you can have as much as many "entry" and "entry child" elements you want.
In fact, looping through all the elements inside your "entry" you will get your COLUMN, then every new entry is a new ROW.
Unfortunately, I don't have excel on the MAC so I just put the logic, you should check the sintax your own... in this way you build a EXCEL table on the worksheet you want.
Dim col = 1; Dim row=1;
For Each xEmployee In xEmpDetails.childNodes
col = 1
For Each xChild In xEmployee.childNodes
Worksheets("NAMEOFTHESHEET").Cells(col, row).Value = xChild.Text
MsgBox xChild.baseName & " " & xChild.Text
col = col + 1;
Next xChild
row = row+1;
Next xEmployee
THE CORRET WAY SHOULD BE THIS:
You are getting the XML from a URL call, but I strongly suggest to try to work with an XML file on disk at the beginning, and check if it's correctly valid. So what you should do is get a sample XML from this "WebService" then save it on disk. An try load it in the following way:
Sub ImportXMLtoList()
Dim strTargetFile As String
Dim wb as Workbook
Application.Screenupdating = False
Application.DisplayAlerts = False
strTargetFile = "C:\example.xml"
Set wb = Workbooks.OpenXML(Filename:=strTargetFile, LoadOption:=xlXmlLoadImportToList)
Application.DisplayAlerts = True
wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Sheet2").Range("A1")
wb.Close False
Application.Screenupdating = True
End Sub
这篇关于加载XML到Excel中通过VBA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!