2012-11-09 176 views
5

我正在构建一个使用从网站中提取数据的宏。目前,我可以使用元素语法(如obj.getElementsByTagName("td").innerText)轻松从表格内容中获取价值。但是,当某些单元格中存在一些非innerText数据时,我遇到了麻烦。它是这样的:从html获取属性字符串值

<img src="/images/amber_pending.gif" border="0" alt="Pending" title="Pending"> 

我尝试使用语法我从别人发现提取“标题”属性值:

For Each tbObj In doc.getElementsByClassName("report removeTdBorder") 
    i = 1 
    For Each trObj In tbObj.getElementsByTagName("tr") 
     If i >= 3 Then 
      j = 1 
      For Each tdObj In trObj.getElementsByTagName("td") 
       If j = 1 Then 
        Set imgObj = tdObj.getElementsByTagName("img") 
        dataArray(i, j) = imgObj.getAttribute("title") 
        Debug.Print imgObj.getAttribute("title") 
        ActiveCell.Offset(0, j) = dataArray(i, j) 
        ActiveCell.Offset(0, j).WrapText = False 
       Else 
        dataArray(i, j) = tdObj.innerText 
        Debug.Print i & ", " & j & ": " & dataArray(i, j) 
        ActiveCell.Offset(0, j) = dataArray(i, j) 
        ActiveCell.Offset(0, j).WrapText = False 
       End If 
       j = j + 1 
      Next tdObj 
      ActiveCell.Offset(1, 0).Activate 
     End If 
     i = i + 1 
    Next trObj 
Next tbObj 

但这一代码进入错误每次和它说:“运行时间错误'438':对象不支持此属性或方法“在行dataArray(i, j) = imgObj.getAttribute("title")。有人能帮助我吗?

回答

5
Set imgObj = tdObj.getElementsByTagName("img") 

返回的图像集合(只有一个被发现即使有),所以你可以使用解决特定的图像(例如):

dataArray(i, j) = imgObj(0).getAttribute("title") 
+0

感谢帮助。然而,看起来这个效果并不好。它表示对于dataArray(i,j)= imgObj(1).getAttribute(“title”),“运行时错误'91':对象变量或块变量未设置”。有没有其他原因? –

+2

我认为IXMLDOMNodeList是基于零的,所以'imgObj(0).getAttribute(“title”)'应该可以工作 – barrowc

+0

@barrowc - 很好的结果。我永远不会记得什么是0和什么是1 ... –