首页 文章

带有标签的HTML文本,用于Excel单元格中的格式化文本

提问于
浏览
36

有没有办法获取HTML并将其导入Excel,以便将其格式化为富文本格式(最好使用VBA)?基本上,当我粘贴到Excel单元格时,我想转向:

<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>

进入这个:

这是一个测试 . 这个文本是 bold 还是斜体

6 回答

  • 26

    是的,这是可能的:)事实上让Internet Explorer为你做脏事;)

    TRIED AND TESTED

    MY ASSUMPTIONS

    • 我假设html文本在Sheet1的单元格A1中 . 您也可以使用变量 .

    • 如果您的列中包含html值,则只需将下面的代码放在循环中即可

    CODE

    Sub Sample()
        Dim Ie As Object
    
        Set Ie = CreateObject("InternetExplorer.Application")
    
        With Ie
            .Visible = False
    
            .Navigate "about:blank"
    
            .document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value
    
            .document.body.createtextrange.execCommand "Copy"
            ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1")
    
            .Quit
        End With
    End Sub
    

    SNAPSHOT

    enter image description here

    HTH

    希德

  • 5

    您可以将HTML代码复制到剪贴板,然后将其作为Unicode文本粘贴回来 . Excel将在单元格中呈现HTML . 看看这篇文章http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

    帖子中的相关宏代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
       Dim objData As DataObject
       Dim sHTML As String
       Dim sSelAdd As String
    
       Application.EnableEvents = False
    
       If Target.Cells.Count = 1 Then
          If LCase(Left(Target.Text, 6)) = "<html>" Then
             Set objData = New DataObject
    
             sHTML = Target.Text
    
             objData.SetText sHTML
             objData.PutInClipboard
    
             sSelAdd = Selection.Address
             Target.Select
             Me.PasteSpecial "Unicode Text"
             Me.Range(sSelAdd).Select
    
          End If
       End If
    
       Application.EnableEvents = True
    
    End Sub
    
  • 9

    如果IE示例不起作用,请使用此示例 . 无论如何,这应该比启动IE实例更快 .

    这是一个完整的解决方案
    http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

    请注意,如果你的innerHTML是所有数字,例如'12345',那么HTML格式在excel中完全不起作用,因为它对数字的处理方式不同?但最后添加一个字符,例如尾随空格 . 12345“&nbsp;”格式好 .

    Sub test()
        Cells(1, 1).Value = "<HTML>1<font color=blue>a</font>" & _
                            "23<font color=red>4</font></HTML>"
        Dim rng As Range
        Set rng = ActiveSheet.Cells(1, 1)
        Worksheet_Change rng, ActiveSheet
    End Sub
    
    
    Private Sub Worksheet_Change(ByVal Target As Range, ByVal sht As Worksheet)
    
        Dim objData As DataObject ' Set a reference to MS Forms 2.0
        Dim sHTML As String
        Dim sSelAdd As String
    
        Application.EnableEvents = False
    
        If Target.Cells.Count = 1 Then
    
                Set objData = New DataObject
                sHTML = Target.Text
                objData.SetText sHTML
                objData.PutInClipboard
                Target.Select
                sht.PasteSpecial Format:="Unicode Text"
        End If
    
        Application.EnableEvents = True
    
    End Sub
    
  • 7

    我知道这个帖子很古老,但在分配innerHTML后,ExecWB为我工作:

    .ExecWB 17, 0
    'Select all contents in browser
    .ExecWB 12, 2
    'Copy them
    

    然后将内容粘贴到Excel中 . 由于这些方法容易出现运行时错误,但在调试模式下一次或两次尝试后工作正常,您可能必须告诉Excel如果遇到错误再试一次 . 我通过将此错误处理程序添加到sub解决了这个问题,它工作正常:

    Sub ApplyHTML()
      On Error GoTo ErrorHandler
        ...
      Exit Sub
    
    ErrorHandler:
        Resume 
        'I.e. re-run the line of code that caused the error
    Exit Sub
         
    End Sub
    
  • 0

    我遇到了BornToCode在原始解决方案的评论中首次发现的相同错误 . 由于不熟悉Excel和VBA,我花了一秒钟才弄清楚如何实现tiQU的解决方案 . 因此,我将其发布为下面的“For Dummies”解决方案

    • 首先在Excel中启用开发人员模式:Link

    • 选择“开发人员”选项卡>“Visual Basic”

    • 单击视图>代码

    • 粘贴下面的代码,更新需要单元格引用正确的行 .

    • 单击绿色运行箭头或按F5

    Sub Sample()
        Dim Ie As Object
        Set Ie = CreateObject("InternetExplorer.Application")
        With Ie
            .Visible = False
            .Navigate "about:blank"
            .document.body.InnerHTML = Sheets("Sheet1").Range("I2").Value
                 'update to the cell that contains HTML you want converted
            .ExecWB 17, 0
                 'Select all contents in browser
            .ExecWB 12, 2
                 'Copy them
            ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("J2")
                 'update to cell you want converted HTML pasted in
            .Quit
        End With
    End Sub
    
  • 7

    你们都有有效的解决方案,而且只有少数几个你可以实现这个 .

    工具需要的是正则表达式,linq,搜索引擎,vb.net或C#和互联网 .

    搜索“html table to dataset” . 然后搜索“数据集到excel而不安装excel” .

    我认为用这些术语你可以将它组合在一起 . ;)

    但这里有一些解决方案 .

    Using sr As StreamReader = New StreamReader(fileName, Encoding.UTF8)
                    result = sr.ReadToEnd()
                End Using
                result = result.Substring(result.IndexOf("<tab"))
                Dim sb As New StringBuilder
                sb.AppendLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">")
                sb.AppendLine("<html>")
                sb.AppendLine("<head>")
                sb.AppendLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1" > "")
                sb.AppendLine("<title>Title</title>")
                sb.AppendLine("</head>")
                sb.AppendLine("<body>")
                sb.Append(result)
                sb.AppendLine("</body>")
                sb.AppendLine("</html>")
                result = sb.ToString()
                File.Move(fileName, System.IO.Path.GetFileNameWithoutExtension(fileName) + ".txt")
                Dim ds As DataSet = GetTableAsDataSet.ConvertHTMLTablesToDataSet(result)
                If (DataSetToExcel.WriteXLSFile(fileName, ds) = True) Then
    

    http://www.dotnetfunda.com/articles/show/51/convert-html-tables-to-a-dataset

    http://www.codeproject.com/Tips/313731/How-to-convert-DataSet-to-Excel-workbook-xls-using

    为简单起见,我的输入文件是一个html表,映射到excel右边给出了正确的视图 . 但观点就是这样 . 所以我在剥离元样式废话时将其读取并将其包装在有效的html中,将其输入以获取数据集并写入数据集 . 请享用 .

    我认为正则表达式可以帮助你收集html的其他部分...

    <table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html>
    

    致记于所述代码的作者 . 我把它放在一起 .

相关问题