将 HTML 表格粘贴到 Excel 中,如何在单元格中保留换行符

Posted

技术标签:

【中文标题】将 HTML 表格粘贴到 Excel 中,如何在单元格中保留换行符【英文标题】:Paste a HTML table into Excel, how to keep the line break in cell 【发布时间】:2012-10-08 02:37:58 【问题描述】:

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

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

我尝试添加css样式

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

但它只适用于 IE。

注意,复制一个纯文本是不行的,我需要在单元格上添加颜色、字体信息。

【问题讨论】:

您好,可以导出而不是粘贴吗? 可以使用宏吗?然后可以预处理剪贴板数据和/或后处理粘贴的数据...... 【参考方案1】:

您可能知道,您可以将数据(例如报告)输出为 Excel 文件,只需添加正确的 content-type 和 content-disposition 标题:

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

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

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

我一直在苦苦挣扎的问题是多行单元格。我需要在单元格中换行,但是当我将 &lt;br&gt; 标记放入 HTML 输出时,Excel 将其解释为新行,而不是现有单元格中的换行符。

添加到样式表中:

br mso-data-placement:same-cell;

然后它就像一个魅力。我希望它有用:)

提示:您可以设置 ContentType 和 header 条件,通过一个文件提供备用 HTML/XLS 报告。

【讨论】:

感谢这个解决方案,对于复制粘贴,我是这样写的:
并且成功了。
不幸的是,这似乎是一个仅限 Windows 的解决方案。 Excel for Mac 2011 v14.x 忽略 mso-data-placement:same-cell; 在样式表方法和使用 Chrome 遇到一些麻烦之后,我终于得到了复制粘贴来使用 &lt;br style="mso-data-placement:same-cell;"/&gt; 并从 Internet Explorer 复制输出。 有什么解决方案可以让它在 Mac 上运行(Excel for Mac 2011 v14.x 等)?【参考方案2】:

看起来 Firefox 完全忽略了 mso-data-placement 指令;它不会出现在 Firebug 样式面板中。也许这就是它无法按预期粘贴的原因?

【讨论】:

【参考方案3】:

如何使用宏,例如下面的代码?

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

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

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

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

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

获取剪贴板文本 使用自定义标记粘贴转换后的版本 恢复原始剪贴板文本 对单元格进行后处理,用换行符替换标记 - 可能会得到改进……

修改为最适合您的需求,例如使用正则表达式来执行替换,但我希望这能让你上路:]

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://***.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>brmso-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

【讨论】:

【参考方案4】:

我通常会遇到这个问题,因为我必须从网站下载 excel 文件,这些文件实际上是 html 文件,这些文件包含在带有 xls 扩展名的 table 标记中 无论 br 标签在单元格中的何处,都会创建一个新行。 所以,我创建了一个小 vbscript 用逗号替换 br 标签,然后我在 excel 中打开文件。它对我很有效。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于将 HTML 表格粘贴到 Excel 中,如何在单元格中保留换行符的主要内容,如果未能解决你的问题,请参考以下文章

怎样将Excel数据批量导入到word表格中

如何把JPEG格式的图片粘贴到EXCEL表格中?

如何将word导入excel

如何将网页上的内容复制到excel表格

excel表格中文字怎么粘贴到word

在网页编辑器中粘贴时如何保留WORD中的表格