J'ai une feuille Excel avec des cellules contenant HTML. Comment puis-je lotter les convertir en clairexuel? Pour le moment, il y a tellement de tags et de styles inutiles. Je veux l'écrire à partir de zéro mais ce sera beaucoup plus facile si je peux obtenir le texte brut. P>
Je peux écrire un script pour convertir HTML en texte brut dans PHP, donc si vous ne pouvez pas penser à une solution dans VBA, vous pouvez peut-être suivre la manière dont je pourrais transmettre les données des cellules sur un site Web et récupérer les données. < / p>
6 Réponses :
Un moyen très simple d'extraire le texte consiste à numériser le caractère HTML par caractère et à accumuler des caractères en dehors des crochets d'angle dans une nouvelle chaîne.
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
Soyez prudent avec cette approche. Si le texte d'entrée inclut
Définissez une référence à "Bibliothèque d'objets HTML Microsoft".
Function HtmlToText(sHTML) As String Dim oDoc As HTMLDocument Set oDoc = New HTMLDocument oDoc.body.innerHTML = sHTML HtmlToText = oDoc.body.innerText End Function
Cela fonctionne bien, mais sachez que l'espace blanc est effondré. Par exemple,
En cas d'effondrement des espaces serait "Comportement attendu", je pense ici (sauf si le texte de l'élément n'a été conçu avec CSS pour préserver les espaces)
Test de l'ISA [espace] code>. (désolé pour le formatage; les espaces supplémentaires ne sortent pas quand je les saisis juste.)
La solution de TIM était super, fonctionnait a apprécié un charme.
J'aimerais apporter contribuer: Utilisez ce code pour ajouter "la bibliothèque d'objets Microsoft HTML" dans l'exécution: p>
Set ID = ThisWorkbook.VBProject.References ID.AddFromGuid "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}", 2, 5
Pouvez-vous montrer un exemple comment cela peut être utilisé avec le code de Tim et Option explicite code>?
La réponse de Tim est excellente. Cependant, un ajustement mineur peut être ajouté pour éviter une réponse d'erreur prévisible.
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
Oui! J'ai réussi à résoudre mon problème aussi. Merci tout le monde /
Dans mon cas, j'avais ce type d'entrée: p> et je ne voulais pas que le résultat soit tout coincé ensemble sans les lignes de bris. p> Donc, j'ai d'abord écarté mon entrée pour chaque code> dans un tableau "paragraphes", puis pour chaque élément, j'ai utilisé la réponse de TIM pour obtenir le texte de HTML (très Douce réponse BTW). P> En plus, j'ai concatéré chaque "paragraphe" nettoyé avec ce caractère de rupture Le code final est: strong> p>
CRH (10) code> pour VBA / Excel. p>
Voici une variante de la solution de Tim's and Gardoglee qui ne nécessite pas de définir une référence à la "bibliothèque d'objets HTML Microsoft". Cette méthode est connue sous le nom de la reliure tardive em> et fonctionnera également dans VBScript. Function HtmlToText(sHTML) As String
Dim oDoc As Object ' As HTMLDocument
If IsNull(sHTML) Then
HtmlToText = ""
Exit Function
End If
Set oDoc = CreateObject("HTMLFILE")
oDoc.body.innerHTML = sHTML
HtmlToText = oDoc.body.innerText
End Function