excel salto de linea
Pegue una tabla HTML en Excel, cómo mantener el salto de línea en la celda (4)
¿Qué hay de usar una macro con, por ejemplo, el siguiente código?
• TransformingPaste1()
: sin embargo, esto falla en mi máquina (aún varias celdas)
- obtiene el texto del portapapeles
- pega una versión transformada usando
mso-data-placement:same-cell
- restaura el texto original del portapapeles
• TransformingPaste2()
: pega en una sola celda en mi máquina, conservando el formato, etc., pero produce un espacio en lugar de una nueva línea porque aún está pegando HTML
- obtiene el texto del portapapeles
- pega una versión transformada usando
vbCrLf
- restaura el texto original del portapapeles
• TransformingPaste3()
: pega en una sola celda en mi máquina, con una nueva línea, pero pierde el formato, etc. (implementación actual) - ¡vea la nota con el enlace!
- obtiene el texto del portapapeles
- pega una versión transformada utilizando un token autodefinido
- restaura el texto original del portapapeles
- post-procesa las celdas, reemplazando el token por nuevas líneas - podría mejorarse ...
Modifíquese según lo que mejor se adapte a sus necesidades, por ejemplo, utilizando expresiones regulares para realizar los reemplazos, pero espero que esto lo ponga en su camino:]
Function GetClipboardText() As String
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.GetFromClipboard
GetClipboardText = BufObj.GetText
End Function
Function SetClipboardText(ByRef text As String)
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.SetText text
BufObj.PutInClipboard
End Function
Function PreProcess(ByRef text As String, ByRef find As String, ByRef replace As String) As String
PreProcess = Application.WorksheetFunction.Substitute(text, find, replace)
End Function
Function PostProcess(ByRef find As String, ByRef replace As String)
Dim rCell As range
For Each rCell In Selection
''TODO: e.g. combine with answers from http://stackoverflow.com/questions/2192730/merge-contents-of-2-excel-cells-keeping-character-format-intact-using-vba
rCell.Formula = Application.WorksheetFunction.Substitute(rCell.Formula, find, replace)
Next
End Function
Sub TransformingPaste1()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<html>", "<html><style>br{mso-data-placement:same-cell;}</style>")
SetClipboardText PasteText
''Selection.PasteSpecial "Unicode Text"
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste2()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<br>", vbCrLf)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste3()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
TempToken = "#mybr#"
PasteText = PreProcess(OrigText, "<br>", TempToken)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
PostProcess TempToken, vbLf
Application.CutCopyMode = False
End Sub
Tengo una tabla html simple, por ejemplo, solo una celda, pero cuando copie el nodo dom y lo pego en Excel, se reconocerá como dos filas. Cómo hacer que Excel obtenga los datos de pegado correctos.
<table><tr><td>1<br>2</td><tr></table>
Traté de añadir estilo css
br {mso-data-placement:same-cell;},
Pero solo funciona en IE.
Tenga en cuenta que copiar un texto sin formato no está bien, necesito agregar color, información de fuente en las celdas.
Como muchos de ustedes probablemente saben, puede generar datos (un informe, por ejemplo) como un archivo de Excel, simplemente agregando el encabezado correcto de tipo de contenido y disposición de contenido:
Response.ContentType = “application/vnd.ms-excel“;
Response.AppendHeader(“content-disposition“, “inline; filename=report.xls“);
Si el cliente tiene instalado MS Excel, su página HTML de salida se abrirá en lugar del navegador web. Excel interpretará todas las etiquetas de formateo (bordes, fuentes, etc.) y TABLE, lo que puede resultar en una hoja de trabajo agradable y con formato, sin utilizar controles pesados del lado del servidor.
El problema por el que estuve luchando durante algún tiempo fue con celdas multilínea. Necesitaba envolver el texto en la celda, pero cuando puse una etiqueta <br>
en la salida HTML, Excel lo interpretó como una nueva fila, no un salto de línea en la celda existente.
añadir en una hoja de estilo:
br {mso-data-placement:same-cell;}
Entonces funciona como un amuleto. Espero que sea útil :)
Consejo: puede hacer que ContentType y el encabezado sean condicionales, proporcionando informes HTML / XLS alternativos con un archivo.
Parece que Firefox ignora por completo la directiva de colocación de datos mso ; no aparece en el panel de estilo de Firebug. Tal vez es por eso que no se pegará como esperas?
Si realmente necesita hacer una copia y pegar, sería mejor editar las ''Propiedades de celda'' en la hoja de Excel antes de copiar los datos. Haga clic derecho en el nombre de la columna en Excel y seleccione las propiedades de la celda. Realice los cambios según corresponda para sus datos y guárdelos. Ahora puede copiar sus datos y esperar que se interpreten correctamente en MS-Excel. Sin embargo, no lo he usado para contenido HTML.