如何利用MSHTML获得网页中指定的Table,最好是通过Table的ID获得.
比如
        <table ID ='SERVERLIST' >            
            <tr>
                <td> a </td>
                <td> b </td>
                <td> b </td>
            </tr>
        </table>如何利用MSHTML获得这个Table,并增加或删除这个Table的行.

解决方案 »

  1.   


    找是找到了,但不是vb的代码.看对你有没有帮助 。---------通过HTML中的MSHTML文档对象模型,前提目标表格要求有ID或名字。
    你首先必须通过各种方法获得Internet Explorer浏览器(Mr Navigate,Sorry)窗口句柄,
    判断它的类名是否是"Internet Explorer_Server",然后通过下述代码获得其文档对象模型指针,即IHTMLDocument2接口。    HWND hw;  
        MSHTML::IHTMLDocument2Ptr g_lpHTMLDocument2; 
        MSHTML::IHTMLElementCollectionPtr col; 
        MSHTML::IHTMLElementPtr EL; 
        DWORD lRes; 
        HRESULT hres; 
        UINT MSG = RegisterWindowMessage("WM_HTML_GETOBJECT"); 
        SendMessageTimeout(hw, MSG, 0, 0,  SMTO_ABORTIFHUNG, 1000, &lRes); 
        hres=ObjectFromLresult(lRes, __uuidof(MSHTML::IHTMLDocument2), 0, (void**)&g_lpHTMLDocument2); 
    得到所有HTML元素:
    HRESULT hr = g_lpHTMLDocument2->get_all(&col);if(FAILED(hr)) return 0;
    long len;
    col->get_length(&len);  
    //get_length函数得到集合元素的数目,数目保存在len中,成功返回S_OK, 否则返回<0的值
    DWORD dwRet = 0;
    for(int i = 0; i < len; i++)    //循环
    {
         //这里你就可以根据表格名称或ID来干正事了,其他不要再问我了,祝你好运!!
    }---------
    www.vicmiao.com
    努力就有美好时光!
      

  2.   

    Private Sub Command1_Click()
        Dim table As MSHTML.IHTMLTable
        Dim tr As MSHTML.IHTMLTableRow
        
        Set table = WebBrowser1.Document.All("SERVERLIST")
        
        Dim row As MSHTML.IHTMLTableRow
        Dim cell As MSHTML.HTMLTableCell
        
        For Each row In table.rows
            For Each cell In row.cells
                Debug.Print cell.innerText
            Next
            Debug.Print
        Next
    End SubPrivate Sub Form_Load()
        WebBrowser1.Navigate "c:\test.html"
    End Sub假设你的HTML保存在:c:\test.html下面,这个是读取table并且获得里面各个单元格内容的。
      

  3.   

    上面的代码修改了一下,可以像Table里面插入行了:Private Sub Command1_Click()
        Dim table As MSHTML.IHTMLTable
        Dim tr As MSHTML.IHTMLTableRow
        
        Set table = WebBrowser1.Document.All("SERVERLIST")
        
        Dim row As MSHTML.IHTMLTableRow
        Dim cell As MSHTML.HTMLTableCell
        
        For Each row In table.rows
            For Each cell In row.cells
                Debug.Print cell.innerText
            Next
            Debug.Print
        Next
        
        Dim rowNew As MSHTML.IHTMLTableRow
        Set rowNew = table.insertRow
        Dim cellNew  As MSHTML.HTMLTableCell
        Set cellNew = rowNew.insertCell()
        cellNew.innerText = "New cell"
    End SubPrivate Sub Form_Load()
        WebBrowser1.Navigate "c:\test.html"
    End Sub
      

  4.   

    Set table = WebBrowser1.Document.All("SERVERLIST")这句话如果table 在Frame的SRC下面无法取得。
      

  5.   

    使用HTMLDocument的getElementById 方法:
    Private WithEvents Doc As MSHTML.HTMLDocumentPrivate Sub Browser_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
            Set Doc = Browser.Document '获取DOC
    End SubPublic sub Command1_Click()
    set table=Doc.getElementById ("SERVERLIST")
    End Sub
      

  6.   

    SERVERLIST 在Frame下的情况
    楼上的办法无法获得 .
    当Table在Frame下的时候,如何获得这个Table。
      

  7.   

    问题已经解决,VB代码如下:
        Dim eleTd As MSHTML.HTMLTable
        Dim webdoc As HTMLDocument
        Dim frawnd  As HTMLWindow2
        
        Set webdoc = WebBrowser1.Document    
        Set frawnd = webdoc.frames("joblist")    
        Set eleTd = frawnd.Document.getElementById("ABC")