salto linea excel web copy paste

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.