2011-03-16 54 views
8

Tengo una hoja de Excel con celdas que contienen html. ¿Cómo puedo convertirlos por lotes a texto sin formato? Por el momento, hay tantas etiquetas y estilos inútiles. Quiero escribirlo desde cero, pero será mucho más fácil si puedo obtener el texto sin formato.Convertir html a texto sin formato en VBA

Puedo escribir una secuencia de comandos para convertir html a texto sin formato en PHP, así que si no puede encontrar una solución en VBA, entonces puede averiguar cómo puedo pasar los datos de las células a un sitio web y recuperar los datos.

Respuesta

14

Establezca una referencia a "Biblioteca de objetos HTML de Microsoft".

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

Tim

+0

Esto funciona bien, pero tenga en cuenta que el espacio en blanco se colapsa. Por ejemplo '

this[space][space][space]is
a[space]test
' sale como 'este [espacio] isa [espacio] prueba'. (Perdón por el formato, los espacios adicionales no salen cuando los escribo). –

+0

Colapsando los espacios en blanco sería un "comportamiento esperado" aquí, creo (a menos que el texto del elemento haya sido diseñado usando CSS para preservar el espacio en blanco) –

4

Una manera muy simple de extraer texto es escanear el carácter HTML y acumular caracteres fuera de los corchetes angulares en una nueva cadena.

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 

Esto puede dejar muchos espacios en blanco extraños, pero ayudará a eliminar las etiquetas.

3

solución de Tim era grande, trabajó le gusta un encanto.

Me gustaría contribuir: Utilice este código para añadir el "objetos HTML de Microsoft" en tiempo de ejecución:

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

Se trabajó en Windows XP y Windows 7.

0

respuesta de Tim es excelente . Sin embargo, se puede agregar un ajuste menor para evitar una respuesta de error previsible.

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 
Cuestiones relacionadas