VB2005 WebbrowserでTABLE参照するには?

解決


ハッピーハッピー  2006-02-08 06:09:05  No: 130142

いままでVB.NETでWebbrowserのTABLEを参照していたのですが、VB2005に移行して、参照できなくなりました。
        Dim objTables As Object
        objTables = objIE.Document.getElementsByTagName("TABLE")
        MsgBox(objTables(0).rows(0).cells(0).innerText)
この記述でVB.NETはOKでしたが、VB2005ではobjTables(0).rows(0).cells(0).innerTextの参照で例外が発生します。
「公開メンバ 'rows' は型 'HtmlElement' に見つかりませんでした。」
VB2005ではどのような記述になるのでしょうか?
宜しくお願い致します。


ハッピーハッピー  2006-02-09 05:01:19  No: 130143

Dim objDoc As Object
        Dim objTables As Object
        Dim objTable As Object
        Dim objTBodies As Object
        Dim objTBody As Object
        Dim objRows As Object
        Dim objRow As Object
        Dim objCells As Object
        Dim objCell As Object
        Dim rIdx As Integer
        Dim cIdx As Integer

        objDoc = objIE.Document
        objTables = objDoc.GetElementsByTagName("TABLE")
        Debug.WriteLine("Tables Count:" & objTables.count)
        For Each objTable In objTables
            objTBodies = objTable.tbodies
            Debug.WriteLine("TBodies Count:" & objTBodies.count)
            For Each objTBody In objTBodies
                objRows = objTBody.rows
                Debug.WriteLine("Row Count:" & objRows.count)
                rIdx = 0
                cIdx = 0
                For Each objRow In objRows
                    objCells = objRow.cells
                    Debug.WriteLine("Cell Count:" & objCells.count)
                    For Each objCell In objCells
                        Debug.WriteLine("row( " & rIdx & " ).cell(" & cIdx & "):" & objCell.innerText)
                        cIdx += 1
                    Next
                    rIdx += 1
                Next
            Next
        Next


ハッピーハッピー  2006-02-09 05:06:21  No: 130144

もう少し、細かくやってみましたが、やっぱりうまくいきません。
上記のコーディングでVB.NETはOKなんですが・・・
今度は、「objTBodies = objTable.tbodies」のところで
「公開メンバ 'tbodies' は型 'HtmlElement' に見つかりませんでした」の例外となります。


魔界の仮面弁士  2006-02-09 07:05:57  No: 130145

> VB2005に移行して、参照できなくなりました。

ActiveXコントロール版 AxWebBrowser の Documentプロパティは、
アンマネージ(COM側)の DOM (IHTMLDocument2) を返しますが、
.NET 2.0 版 WebBrowser コントロールの Documentプロパティは、
マネージ(.NET側)の DOM (HtmlDocument) を返すからでしょう。

> VB2005ではどのような記述になるのでしょうか?

まずは、アンマネージ DOM で使えていた機能が、
マネージ DOM に実装されているのかをチェックしましょう。

その結果、マネージ DOM に実装されていないようであれば、
DomDocument プロパティからアンマネージ DOM を取得して、
それを使うようにしてみてください。


ハッピーハッピー  2006-02-09 10:24:48  No: 130146

魔界の仮面弁士様、早速のご回答ありがとうございます。
       objDoc = objIE.Document.DomDocument
この1行だけでした。
あと、objxxx.countをobjxxx.lengthにしなければなりません。
(VB.NETは.lengthだったのになぁと気になっていましたが・・・)
これで5日間悩んだ問題がこの1行で解決です。
これなら既存のプログラムを大改造なく使えそうです。
ありがとうございました。
本当に感謝いたして降ります(5日間の気持ち・・・)


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加