带有标签的HTML文本,用于在Excel单元格中格式化文本
有没有一种方法来获取HTML并将其导入到Excel中,以便将其格式化为富文本(最好使用VBA)? 基本上,当我粘贴到一个Excel单元格,我期待着把这个:
<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
进入这个:
这是一个testing。 这个文本是粗体还是斜体?
是的,这是可能的:)实际上让Internet Explorer为你做肮脏的工作;)
尝试和testing
我的假设
- 我假设HTML文本在Sheet1的单元格A1中。 您也可以使用一个variables。
- 如果你有一个充满html值的列,那么简单地把下面的代码放在一个循环中
码
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
快照
HTH
希德
您可以将HTML代码复制到剪贴板并将其作为Unicode文本粘贴回去。 Excel将在单元格中呈现HTML。 看看这个posthttp://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
来自post的相关macros代码:
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
如果IE示例不起作用,使用这个。 无论如何,这应该比启动一个IE的实例更快。
这里是一个完整的解决scheme
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
我知道这个线程是古老的,但在分配innerHTML之后,ExecWB为我工作:
.ExecWB 17, 0 'Select all contents in browser .ExecWB 12, 2 'Copy them
我遇到了BornToCode在原始解决scheme的评论中首次发现的错误。 不熟悉Excel和VBA,我花了一秒钟的时间来弄清楚如何实现tiQU的解决scheme。 所以我把它作为“For Dummies”解决scheme发布在下面
- 首先在Excel中启用开发人员模式: 链接
- select开发人员选项卡> 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
你们都有有效的解决scheme,只有less数人可以实现这一点。
工具需要的是正则expression式,linq,search引擎,vb.net或C#和互联网。
search“html表格到数据集”。 然后search“数据集擅长没有安装Excel”。
我认为用这些术语你可能会把它放在一起。 ;)
但是这里有一些解决scheme。
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
为了简单起见,我的input文件是一个html表格,它映射到excel,给出正确的视图。 但一个看法就是这样。 所以我阅读它剥离元风格废话脱衣舞,并包裹在有效的HTML饲料中获取数据集并写出数据集。 请享用。
我认为正则expression式可以帮助您收集HTML的另一部分…
<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html>
积分转到所述代码的作者。 我把它放在一起。