将包含换行符的HTML字符串粘贴到单个Excel单元格中

时间:2017-10-26 21:27:04

标签: html excel vba excel-vba

我正在尝试将HTML / RTF格式的文本插入到单个Excel单元格中,保留文本格式(颜色,粗体,斜体等)。问题是如果文本包含换行符(< br>),则断点之间的部分文本被插入到单独的单元格中(参见附件截图)。 我尝试过使用 ,但它似乎被Excel的解析器忽略,并被视为正常< BR取代。论坛上的很多主题都说mso-data-placement:same-cell允许你在一个单元格中有新的lince中断,但在我的情况下,这种样式会被忽略。

在将文本粘贴到单个单元格中时,您是否可以建议如何实现文本格式化和换行?我的代码(简化了一下)如下:

问题描述和所需解决方案

Description of the problem and desired solution

Private Sub Worksheet_Change2(ByVal Target As Range, ByVal sht As Worksheet)
Dim objData As MSForms.DataObject
Dim sHTML As String

Application.EnableEvents = False
Set objData = New MSForms.DataObject
sHTML = "<html>ABC<br>EFG" & "<br style=" & Chr(34) & "mso-data-placement:same-cell;" & Chr(34) & " />" & "XYZ</html>"
objData.SetText  sHTML
objData.PutInClipboard

sht.PasteSpecial Format:="Unicode Text" ', NoHTMLFormatting:=False
Application.EnableEvents = True
End Sub

1 个答案:

答案 0 :(得分:1)

要让<br style="mso-data-placement:same-cell;"/>工作,它需要在a中。

Private Sub Worksheet_Change2(ByVal Target As Range, ByVal sht As Worksheet)
    Const br = "<br style=""mso-data-placement:same-cell;""/>"
    Application.EnableEvents = False
    Dim objData As MSForms.DataObject
    Set objData = New MSForms.DataObject

    With CreateObject("System.Text.StringBuilder")
        .Append_3 "<HTML>"
        .Append_3 "<TABLE>"
        .Append_3 "<TR>"
        .Append_3 "<TD>"
        .Append_3 "ABC"
        .Append_3 br
        .Append_3 "EFG"
        .Append_3 br
        .Append_3 "XYZ"
        .Append_3 "</TD>"
        .Append_3 "</TR>"
        .Append_3 "</TABLE>"
        .Append_3 "</HTML>"
        objData.SetText .ToString
        objData.PutInClipboard   
    End With

    sht.Paste
    Application.EnableEvents = True
End Sub

注意:使用我在CodeReview帖子Creating HTML using a Builder Pattern中的TagBuilder类可能会有所帮助