51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3340|回复: 13
打印 上一主题 下一主题

[求助] qtp 如何 把XML导成EXCEL (各位帮忙)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-8-7 13:03:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
xml 文件:
<Message>
    <Head>
        <Id>001</Id>
        <From>上海/From>
        <To>新加坡</To>
        <Cc>test<Cc/>
    </Head>
    <Body>
        <INFO>
            <NAME>紫龙</NAME>
            <NO>001</NO>
        </INFO>
        <INFO>
            <NAME>星矢</NAME>
            <NO>002</NO>
         </INFO>
     </Body>
</Message>

如何把这个 XML导出EXCEL成:
001 上海 新加坡 紫龙 001
001 上海 新加坡 星矢 002

急求方法,非常困混,
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-8-7 13:30:35 | 只看该作者
你这个代码的工作量可不小呢……
首先要用VBS读取xml的文件,将xml文件的内容组织成一个二维数组
其次还是用vbs把刚才得到的那个二维数组写进excel。
而且那个xml文件组织的好象也有问题,比如说从xml文件中,根本看不出来为什么紫龙和要上海放在一行,如果紫龙和上海都属于同一个对象的属性,那么应该把他们放在同一个节点下才对哈
具体的代码实在是没精力去写了,等待高人帖代码吧。

[ 本帖最后由 dreamever 于 2009-8-7 13:33 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-8-7 13:47:32 | 只看该作者
是这样的,上海市头信息,所有body的信息 使用的 头信息都一样

如果解析到excel中,头就重复导出

那请问 可以是实现这样吗:
Id 001
From 上海
to 新加坡
name 星矢
name 紫龙
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2009-8-7 14:23:31 | 只看该作者
如何 判断一个节点是文本的 或则仍然是节点? 求解
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-8-7 17:53:21 | 只看该作者
有高人 解答下吗??? 很着急
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-8-7 20:37:15 | 只看该作者
从Excel 导到 XML还好弄点,像楼主要求的这种反方向就困难多了。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-8-7 23:23:04 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2009-8-8 00:53:10 | 只看该作者
如果只要提取
Id 001
From 上海
to 新加坡
name 星矢
name 紫龙

可以实现吗??? 请求帮忙!
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2009-8-8 02:19:45 | 只看该作者
有点晚了~随便写写睡觉去了~没写啥注释自己研究去吧,我对xml也不老熟悉的-.-!

Dim xmlDoc,Head
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.load "D:\QTP\Test.xml"

Set Root = xmlDoc.documentElement
Set Childs = Root.childNodes
Set Head = Childs.item(0)
Set Body = Childs.item(1)
Set varID = Head.childNodes.item(0)
Set varFrom = Head.childNodes.item(1)
Set varTo = Head.childNodes.item(2)
Set varCc = Head.childNodes.item(3)

i = 1
For Each BodyChild In Body.childNodes
        Set varName = BodyChild.childNodes.item(0)
        Set varNo = BodyChild.childNodes.item(1)

        DataTable.SetCurrentRow(i)
        DataTable.Value(1, dtGloabalSheet) = varID.firstChild.nodeValue
        DataTable.Value(2, dtGloabalSheet) = varFrom.firstChild.nodeValue
        DataTable.Value(3, dtGloabalSheet) = varTo.firstChild.nodeValue
        DataTable.Value(4, dtGloabalSheet) = varCc.firstChild.nodeValue
        DataTable.Value(5, dtGloabalSheet) = varName.firstChild.nodeValue
        DataTable.Value(6, dtGloabalSheet) = varNo.firstChild.nodeValue
        i = i + 1
Next

DataTable.Export ("D:\QTP\Test.xls")
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2009-8-8 11:09:29 | 只看该作者
OK 谢谢啊,如果 需要定位到一个<NAME>星矢</NAME>

把他读出来,当配置信息用,最简单的方法是???
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-8-25 11:11
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2009-8-8 14:00:33 | 只看该作者
    关注
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2009-8-8 17:33:46 | 只看该作者
    我是直接在excel中写了个模版,然后导出XML文件。然后写了一些操作XML的函数来写XML文件的……
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2009-8-17 21:12:19 | 只看该作者
    Excel可以打开XML的,说明已经有现成方法了,看能不能用vbs调用一下啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2009-8-18 11:51:51 | 只看该作者
    GetNodeValue "D:\test.xml", "Id"
    GetNodeValue "D:\test.xml", "From"
    GetNodeValue "D:\test.xml", "To"
    GetNodeValue "D:\test.xml", "NAME"
    1. Function GetNodeValue (ByVal strXmlFilePath,ByVal xmlNodeName)
    2.         Dim xmlDoc,xmlRoot
    3.         Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    4.         xmlDoc.async = False  
    5.         xmlDoc.load strXmlFilePath
    6.         If xmlDoc.parseError.errorCode <> 0 Then
    7.                 MsgBox "Wrong XML Format, caused by "& Chr(13) &  xmlDoc.parseError.reason
    8.                 Exit Function              
    9.         End If
    10.         Set xmlElem = xmlDoc.getElementsByTagName(xmlNodeName)
    11.                 For i = 0 To xmlElem.length - 1
    12.                         Set xmlItem = xmlElem.item(i).ChildNodes.Item(0)        
    13.                                 MsgBox xmlNodeName&" "&xmlItem.nodeValue
    14.                 Next
    15.                 Set xmlItem = Nothing
    16.                 Set xmlElem = Nothing
    17.                 Set xmlDoc = Nothing
    18. End Function
    复制代码
    取到值之后写入Excel就不用我再多写了吧
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-27 10:28 , Processed in 0.075877 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表