2011-03-16 109 views
8

我有一個包含html單元格的Excel工作表。我如何批量將它們轉換爲純文本?目前有這麼多無用的標籤和樣式。我想從頭開始編寫它,但如果我可以獲取純文本,它將變得更加容易。將html轉換爲VBA中的純文本

我可以編寫一個腳本來將html轉換爲純文本的PHP,所以如果你不能想到VBA中的解決方案,那麼也許你可以告訴我如何將單元格數據傳遞到網站並檢索數據。

回答

14

設置對「Microsoft HTML對象庫」的引用。

Function HtmlToText(sHTML) As String 
    Dim oDoc As HTMLDocument 
    Set oDoc = New HTMLDocument 
    oDoc.body.innerHTML = sHTML 
    HtmlToText = oDoc.body.innerText 
End Function 

+0

這很好,但請注意,空白處已摺疊。例如'

this[space][space][space]is
a[space]test
''出現這個[空間] isa [空間]測試'。 (對格式的抱歉;多餘的空格不會在我輸入時出現) – 2011-03-17 06:04:05

+0

在我看來,摺疊空格將是「預期的行爲」(除非元素文本使用css保留空格) – 2016-10-02 17:00:05

4

提取文本的一種非常簡單的方法是按字符掃描HTML字符,並將尖括號外的字符累積到新字符串中。

Function StripTags(ByVal html As String) As String 
    Dim text As String 
    Dim accumulating As Boolean 
    Dim n As Integer 
    Dim c As String 

    text = "" 
    accumulating = True 

    n = 1 
    Do While n <= Len(html) 

     c = Mid(html, n, 1) 
     If c = "<" Then 
      accumulating = False 
     ElseIf c = ">" Then 
      accumulating = True 
     Else 
      If accumulating Then 
       text = text & c 
      End If 
     End If 

     n = n + 1 
    Loop 

    StripTags = text 
End Function 

這可能會留下很多無關的空白,但它會幫助刪除標記。

3

Tim的解決方案是偉大的,工作很喜歡一個魅力。

我倒是願意湊錢:使用此代碼在運行時添加了「Microsoft HTML對象庫」:

Set ID = ThisWorkbook.VBProject.References 
ID.AddFromGuid "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}", 2, 5 

它工作在Windows XP和Windows 7

0

添的回答是優秀。但是,可以添加小調整以避免一個可預見的錯誤響應。

Function HtmlToText(sHTML) As String 
     Dim oDoc As HTMLDocument 

     If IsNull(sHTML) Then 
     HtmlToText = "" 
     Exit Function 
     End-If 

     Set oDoc = New HTMLDocument 
     oDoc.body.innerHTML = sHTML 
     HtmlToText = oDoc.body.innerText 
    End Function