いろいろ試してみましたが、どれも正常に動作していないようです。私は Access DB を持っていて、VBA でコードを書いています。HTML ソース コードの文字列があり、すべての HTML コードとタグを削除して、HTML やタグが残っていないプレーン テキスト文字列だけにすることに関心があります。これを行う最善の方法は何ですか?
ありがとう
悪いマークアップに対して可能な限り回復力のある方法の 1 つです。
with createobject("htmlfile")
.open
.write "<p>foo <i>bar</i> <u class='farp'>argle </zzzz> hello </p>"
.close
msgbox "text=" & .body.outerText
end with
Function StripHTML(cell As Range) As String
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
Dim sInput As String
Dim sOut As String
sInput = cell.Text
With RegEx
.Global = True
.IgnoreCase = True
.MultiLine = True
.Pattern = "<[^>]+>" 'Regular Expression for HTML Tags.
End With
sOut = RegEx.Replace(sInput, "")
StripHTML = sOut
Set RegEx = Nothing
End Function
これはあなたを助けるかもしれません、頑張ってください。
それは、html 構造がどれほど複雑で、そこからどれだけのデータが必要かによって異なります。
複雑さによっては、正規表現で回避できる場合もありますが、複雑なマークアップの場合、正規表現を使用して html からデータを解析しようとすることは、フォークでスープを食べようとするようなものです。
htmFile オブジェクトを使用して、フラット ファイルを操作可能なオブジェクトに変換できます。次に例を示します。
Function ParseATable(url As String) As Variant
Dim htm As Object, table As Object
Dim data() As String, x As Long, y As Long
Set htm = CreateObject("HTMLfile")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
htm.body.innerhtml = .responsetext
End With
With htm
Set table = .getelementsbytagname("table")(0)
Redim data(1 To table.Rows.Length, 1 To 10)
For x = 0 To table.Rows.Length - 1
For y = 0 To table.Rows(x).Cells.Length - 1
data(x + 1, y + 1) = table.Rows(x).Cells(y).InnerText
Next y
Next x
ParseATable = data
End With
End Function
事前バインディングの使用:
Public Function GetText(inputHtml As String) As String
With New HTMLDocument
.Open
.write "<p>foo <i>bar</i> <u class='farp'>argle </zzzz> hello </p>"
.Close
StripHtml = .body.outerText
End With
End Function