生成表格

时间:2016-03-18 09:53:42

标签: vbscript hta

我正在尝试从表行和表格单元格中推送VBScript代码的输出。

我的代码是:

Set table = document.CreateElement("table") 
i = 0
For Each node In objMSXML.selectNodes(sXPath)
    Set tr = document.createElement("tr")
    Set td = document.createElement("td")
    For Each element In node
        td.innerText = element.parentNode.nodeName & "->" & element.text
        tr.appendChild td
    Next
    table.appendChild tr
    ObjOutFile.WriteLine node.parentNode.nodeName & "->" & node.text
    i = i + 1
Next
document.body.appendChild table

它出了什么问题?当我能够在列表中推送输出时,它无法正常工作。

修改 我正在使用此代码按预期打印输出但未填充表。

ObjOutFile.WriteLine thing.path
document.body.appendChild p
Set tbody = document.createElement("tbody") 
For Each node In objMSXML.selectNodes(sXPath)
    Set trow = document.createElement("tr")
    Set tcol = document.createElement("td")
    tcol.innerText = tcol.innerText & node.parentNode.nodeName & "->" & node.text
    ObjOutFile.WriteLine node.parentNode.nodeName & "->" & node.text
    trow.appendChild(tcol)
    tbody.appendChild(trow)
    'ObjOutFile.WriteLine node.parentNode.nodeName & "->" & node.text
Next
document.appendChild(tbody)

ObjOutFile.writeLine打印如下:

C:\Users\abc\Desktop\samp.txt
hamster->AbcPos
hamster->Database Layer
hairyStyle->qskxyz
hairyGirl->qixyz
hairyGirl->abc
hairyGirl->def

2 个答案:

答案 0 :(得分:1)

您的代码中有两个问题:

  • node不是集合,因此For Each element In node失败。你的HTA中可能有On Error Resume Next elswhere隐藏了这个错误,因为否则你会看到这样的错误信息:

      

    Object不支持此属性或方法。

  • 您需要先将表格行追加到<tbody>元素(参见this related question)。

将您的代码更改为类似内容(并删除On Error Resume Next):

Set table = document.createElement("table")
Set tbody = document.createElement("tbody")
i = 0
For Each node In objMSXML.selectNodes(sXPath)
    Set tr = document.createElement("tr")
    Set td = document.createElement("td")
    td.innerText = node.parentNode.nodeName & "->" & node.text
    tr.appendChild td
    tbody.appendChild tr
    i = i + 1
Next
table.appendChild tbody
document.body.appendChild table

答案 1 :(得分:0)

您希望每个节点都有一行,当前节点的每个元素都需要一列。所以

For Each node In objMSXML.selectNodes(sXPath)
    Set tr = document.createElement("tr")
    Set td = document.createElement("td")
    For Each element In node
        td.innerText = element.parentNode.nodeName & "->" & element.text
        ...

应该是

For Each node In objMSXML.selectNodes(sXPath)
    Set tr = document.createElement("tr")
    For Each element In node
        Set td = document.createElement("td")
        td.innerText = element.parentNode.nodeName & "->" & element.text
        ...