将一个HTML表格粘贴到Excel中,如何保持单元格中的换行符

我有一个简单的html表,例如,只有一个单元格,但是当我复制DOM节点,并将其粘贴到Excel中,它将被识别为两行,如何让Excel获取正确的粘贴数据。

<table><tr><td>1<br>2</td><tr></table> 

我试图添加CSS样式

 br {mso-data-placement:same-cell;}, 

但它只适用于IE。

注意,复制纯文本不行,我需要在单元格中添加颜色,字体信息。

您可能知道很多人,只要添加正确的content-type和content-disposition标头,就可以将数据(例如报告)作为Excel文件输出:

Response.ContentType =“application / vnd.ms-excel”;

Response.AppendHeader(“content-disposition”,“inline; filename = report.xls”);

如果客户端安装了MS Excel,您的输出HTML页面将被打开,而不是Web浏览器。 Excel将解释所有格式(边框,字体等)和TABLE标签,这可以产生一个很好的,格式化的工作表,而不使用重量级的服务器端控件。

我一直在挣扎的问题是多线电池。 我需要在单元格中包装文本,但是当将标记放入HTML输出时,Excel会将其解释为新行,而不是现有单元格中的换行符。

添加到样式表中:

 br {mso-data-placement:same-cell;} 

那么它就像一个魅力。 我希望它有用:)

提示:您可以使ContentType和标题有条件地提供替代HTML / XLS报告和一个文件。

看起来Firefox完全忽略了mso-data-placement指令; 它不会出现在Firebug样式面板中。 也许这就是为什么它不会像你期望的粘贴?

如何使用例如以下代码的macros?

TransformingPaste1() :但是,这在我的机器上仍然失败(仍然是多个单元格)

  • 获取剪贴板文本
  • 使用mso-data-placement:same-cell粘贴转换的版本
  • 恢复原来的剪贴板文本

TransformingPaste2() :粘贴在我的机器上的单个单元格中,保持格式化等,但结果是空格而不是换行符,因为您仍在粘贴HTML

  • 获取剪贴板文本
  • 使用vbCrLf粘贴转换后的版本
  • 恢复原来的剪贴板文本

TransformingPaste3() :粘贴在我的机器上的单个单元格中,换行符,但失去格式化等(当前实现) – 请参阅链接注释!

  • 获取剪贴板文本
  • 使用自定义标记来粘贴转换的版本
  • 恢复原来的剪贴板文本
  • 后处理单元格,用换行符replace令牌 – 可能会改进…

修改为最适合您的需求,例如使用正则expression式来执行replace,但是我希望这可以让您顺其自然:]

 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: eg 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 

如果您真的需要复制粘贴,最好在复制数据之前在Excel表格中编辑“单元属性”。 右键单击Excel中的列名称,然后select单元格属性。 根据您的数据进行适当的更改并保存。 现在您可以复制您的数据,并希望在MS-Excel中正确解释它。 不过,我还没有使用它的HTML内容。