Texte HTML avec balises pour le texte formaté dans une cellule Excel
y a-t-il un moyen de prendre HTML et de l'importer dans excel pour qu'il soit formaté en texte riche (de préférence en utilisant VBA)? Fondamentalement, quand je colle à une cellule Excel, je cherche à tourner ceci:
<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
en:
Ceci est un test. Sera-ce texte gras ou italique
6 réponses
Oui c'est possible :) En fait laisser Internet Explorer faire le sale boulot pour vous ;)
ESSAYÉ ET TESTÉ
MES SUPPOSITIONS
- je suppose que le texte html est dans la cellule A1 de Sheet1. Vous pouvez également utiliser une variable à la place.
- si vous avez une colonne pleine de valeurs html, alors mettez simplement le code ci-dessous dans un boucle
CODE
Sub Sample()
Dim Ie As Object
Set Ie = CreateObject("InternetExplorer.Application")
With Ie
.Visible = False
.Navigate "about:blank"
.document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value
.document.body.createtextrange.execCommand "Copy"
ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1")
.Quit
End With
End Sub
SNAPSHOT
HTH
Sid
Vous pouvez copier le code HTML dans le presse-papier et le coller spécial il en arrière comme texte Unicode. Excel affichera le HTML dans la cellule. Découvrez ce post http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
La macro en question le code du poste:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objData As DataObject
Dim sHTML As String
Dim sSelAdd As String
Application.EnableEvents = False
If Target.Cells.Count = 1 Then
If LCase(Left(Target.Text, 6)) = "<html>" Then
Set objData = New DataObject
sHTML = Target.Text
objData.SetText sHTML
objData.PutInClipboard
sSelAdd = Selection.Address
Target.Select
Me.PasteSpecial "Unicode Text"
Me.Range(sSelAdd).Select
End If
End If
Application.EnableEvents = True
End Sub
si L'exemple IE ne fonctionne pas utilisez celui-ci. De toute façon, ça devrait être plus rapide que de commencer. une instance d'internet explorer.
Voici une solution complète basée sur on
http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
Note, si votre innerHTML est tous les numéros eg '12345', formatage HTML ne pas travailler entièrement dans excel car il traite le nombre différemment? mais d'ajouter un personnage par exemple un espace arrière à la fin par exemple. 12345 + " & nbsp;" formats ok.
Sub test()
Cells(1, 1).Value = "<HTML>1<font color=blue>a</font>" & _
"23<font color=red>4</font></HTML>"
Dim rng As Range
Set rng = ActiveSheet.Cells(1, 1)
Worksheet_Change rng, ActiveSheet
End Sub
Private Sub Worksheet_Change(ByVal Target As Range, ByVal sht As Worksheet)
Dim objData As DataObject ' Set a reference to MS Forms 2.0
Dim sHTML As String
Dim sSelAdd As String
Application.EnableEvents = False
If Target.Cells.Count = 1 Then
Set objData = New DataObject
sHTML = Target.Text
objData.SetText sHTML
objData.PutInClipboard
Target.Select
sht.PasteSpecial Format:="Unicode Text"
End If
Application.EnableEvents = True
End Sub
je sais que ce fil est ancien, mais après avoir assigné l'innerHTML, ExecWB a fonctionné pour moi:
.ExecWB 17, 0
'Select all contents in browser
.ExecWB 12, 2
'Copy them
et puis il suffit de coller le contenu dans Excel. Puisque ces méthodes sont sujettes à des erreurs d'exécution, mais fonctionnent bien après un ou deux essais en mode debug, vous pourriez devoir dire à Excel d'essayer à nouveau si elle tombe dans une erreur. J'ai résolu cela en ajoutant ce gestionnaire d'erreurs au sous-marin, et cela fonctionne très bien:
Sub ApplyHTML()
On Error GoTo ErrorHandler
...
Exit Sub
ErrorHandler:
Resume
'I.e. re-run the line of code that caused the error
Exit Sub
End Sub
J'ai rencontré la même erreur que BornToCode a d'abord identifiée dans les commentaires de la solution originale. N'étant pas familier avec Excel et VBA, il m'a fallu une seconde pour comprendre comment mettre en œuvre la solution de tiQU. Donc je l'affiche comme une solution "pour les Nuls" ci-dessous
- tout d'Abord activer le mode développeur dans Excel: Lien
- sélectionnez L'onglet Developer > Visual Basic
- Cliquez Sur View > Code
- coller le code sous mettre à jour les lignes il faut que les références aux cellules soient correctes.
- cliquez sur la flèche verte ou appuyez sur F5
Sub Sample()
Dim Ie As Object
Set Ie = CreateObject("InternetExplorer.Application")
With Ie
.Visible = False
.Navigate "about:blank"
.document.body.InnerHTML = Sheets("Sheet1").Range("I2").Value
'update to the cell that contains HTML you want converted
.ExecWB 17, 0
'Select all contents in browser
.ExecWB 12, 2
'Copy them
ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("J2")
'update to cell you want converted HTML pasted in
.Quit
End With
End Sub
Vous avez tous des solutions valables, et avec une poignée d'entre eux, vous pouvez mettre en œuvre exactement cela.
les outils nécessaires sont des expressions régulières, linq, un moteur de recherche, vb.net ou C# et internet.
Recherche pour "tableau html à dataset". Ensuite, la recherche "jeu de données à excel sans excel est installé".
je pense qu'avec ces conditions, vous pourriez être en mesure de les mettre ensemble. ;)
Mais voici quelques-uns des solution.
Using sr As StreamReader = New StreamReader(fileName, Encoding.UTF8)
result = sr.ReadToEnd()
End Using
result = result.Substring(result.IndexOf("<tab"))
Dim sb As New StringBuilder
sb.AppendLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">")
sb.AppendLine("<html>")
sb.AppendLine("<head>")
sb.AppendLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1" > "")
sb.AppendLine("<title>Title</title>")
sb.AppendLine("</head>")
sb.AppendLine("<body>")
sb.Append(result)
sb.AppendLine("</body>")
sb.AppendLine("</html>")
result = sb.ToString()
File.Move(fileName, System.IO.Path.GetFileNameWithoutExtension(fileName) + ".txt")
Dim ds As DataSet = GetTableAsDataSet.ConvertHTMLTablesToDataSet(result)
If (DataSetToExcel.WriteXLSFile(fileName, ds) = True) Then
http://www.dotnetfunda.com/articles/show/51/convert-html-tables-to-a-dataset
http://www.codeproject.com/Tips/313731/How-to-convert-DataSet-to-Excel-workbook-xls-using
par souci de simplicité, mon fichier d'entrée est une table html qui correspond à excel right donnant la bonne vue. Mais d'un point de vue est tout c'est. donc, je l'ai lu dans la bande de hors la méta style de la merde et l'envelopper dans un code html valide alimentation en l' ensemble de données et d'écrire l'ensemble de données. profiter.
je pense que l'expression régulière pourrait vous aider à rassembler l'autre partie du html...
<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html>
les crédits vont aux auteurs de ce code. Je viens de les mettre ensemble.