5

いろいろ試してみましたが、どれも正常に動作していないようです。私は Access DB を持っていて、VBA でコードを書いています。HTML ソース コードの文字列があり、すべての HTML コードとタグを削除して、HTML やタグが残っていないプレーン テキスト文字列だけにすることに関心があります。これを行う最善の方法は何ですか?

ありがとう

4

6 に答える 6

8

悪いマークアップに対して可能な限り回復力のある方法の 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
于 2012-10-09T16:14:18.523 に答える
6
    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  

これはあなたを助けるかもしれません、頑張ってください。

于 2012-10-09T16:10:28.243 に答える
3

それは、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 
于 2012-10-09T16:14:40.007 に答える
0

事前バインディングの使用:

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
于 2012-10-10T08:50:45.047 に答える