tablas - Texto HTML con etiquetas para texto formateado en una celda de Excel
tablas en html ejemplos (6)
Me encontré con el mismo error que BornToCode identificado por primera vez en los comentarios de la solución original. Como no estaba familiarizado con Excel y VBA, tardé un segundo en descubrir cómo implementar la solución de tiQU. Así que lo estoy publicando como una solución "For Dummies" a continuación
- Primero habilite el modo desarrollador en Excel: Link
- Seleccione la pestaña Desarrollador> Visual Basic
- Haga clic en Ver> Código
- Pegue el código siguiente para actualizar las líneas que requieren referencias de celda para que sean correctas.
- Haga clic en la flecha verde de ejecución o presione 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
¿Hay alguna manera de tomar HTML e importarlo a Excel para que se formatee como texto enriquecido (preferiblemente mediante el uso de VBA)? Básicamente, cuando pego en una celda de Excel, estoy buscando convertir esto:
<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
dentro de esto:
Esto es una prueba. ¿Este texto será negrita o cursiva?
Puede copiar el código HTML al portapapeles y pegarlo de nuevo como texto Unicode. Excel representará el HTML en la celda. Echa un vistazo a esta publicación http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
El código de macro relevante de la publicación:
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
Sé que este hilo es antiguo, pero después de asignar el innerHTML, ExecWB funcionó para mí:
.ExecWB 17, 0
''Select all contents in browser
.ExecWB 12, 2
''Copy them
Y luego simplemente pegue los contenidos en Excel. Dado que estos métodos son propensos a errores de tiempo de ejecución, pero funcionan bien después de uno o dos intentos en modo de depuración, es posible que tenga que decirle a Excel que intente de nuevo si se produce un error. Lo resolví agregando este manejador de errores al sub, y funciona 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
Sí, es posible :) De hecho, deje que Internet Explorer haga el trabajo sucio por usted;)
TRATADO Y PROBADO
MIS SUPUESTOS
- Supongo que el texto html está en la celda A1 de Sheet1. También puedes usar una variable en su lugar.
- Si tiene una columna llena de valores html, simplemente coloque el siguiente código en un bucle
CÓDIGO
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
INSTANTÁNEA
HTH
Sid
Si el ejemplo de IE no funciona, usa este. De todos modos, esto debería ser más rápido que iniciar una instancia de IE.
Aquí hay una solución completa basada en
http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
Tenga en cuenta que si su innerHTML es de todos los números, por ejemplo, ''12345'', el formato HTML no funcionará completamente en Excel ya que trata el número de manera diferente. pero agrega un carácter, por ejemplo, un espacio al final, por ejemplo. 12345 + "& nbsp;" formatos bien.
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
Todos ustedes tienen soluciones válidas, y con un puñado de ellas puede implementar exactamente esto.
Las herramientas que necesitan son expresiones regulares, linq, un motor de búsqueda, vb.net o C # e Internet.
Busque "tabla html para conjunto de datos". A continuación, busque "conjunto de datos para sobresalir sin Excel instalado".
Creo que con esos términos podrías juntarlo. ;)
Pero aquí hay algo de la solución.
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
En aras de la simplicidad, mi archivo de entrada es una tabla html que se correlaciona con Excel para dar la vista correcta. Pero una vista es todo lo que es. así que lo leí en striptease de la basura de metaestilo y lo envolví en html válido, lo introduje para obtener el conjunto de datos y escribir los datos establecidos. disfrutar.
Creo que la expresión regular podría ayudarte a reunir la otra parte del html ...
<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html>
Los créditos van a los autores de dicho código. Solo lo armé.