有没有一种方法可以将HTML导入到excel中,以便将其格式化为富文本(最好使用VBA)?基本上,当我粘贴到Excel单元格,我希望把这个:带文本标签的Excel文本格式文本
<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
到这一点:
这是一个测试。将这段文字是大胆或斜体
有没有一种方法可以将HTML导入到excel中,以便将其格式化为富文本(最好使用VBA)?基本上,当我粘贴到Excel单元格,我希望把这个:带文本标签的Excel文本格式文本
<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
到这一点:
这是一个测试。将这段文字是大胆或斜体
是的,它是可能的:)其实让Internet Explorer中做肮脏的工作适合你;)
久经考验
我的假设
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
快照
HTH
Sid
您可以将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
谢谢。在Excel 2010中,我必须在_Tools..References_中手动添加'FM20.DLL',以便从“Microsoft Forms 2.0对象库”中获取“DataObject”。然后我遇到了'Me.PasteSpecial'问题,因为它不喜欢我(不要开玩笑)。 'Target.PasteSpecial'给出了一个错误,但是'Sheets(1).Range(“B51”).PasteSpecial'确实有效。我放弃尝试将粘贴到合并的单元格中,只需在配置的HTML中使用自由散布的BR标签来强制换行来控制输出的宽度。 – 2017-10-18 10:22:04
如果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
仅供参考,我没有在我的默认参考库中的MS Forms 2.0,所以我不得不添加它。在我的PC上是C:\ WINDOWS \ system32 \ FM20.dll – 2014-07-23 14:33:52
太棒了!在德语Excel中,格式化字符串是本地化的,我需要'sht.PasteSpecial Format:=“Unicode-Text”'。对于其他本地化,请在宏中记录一次选择性粘贴(或粘贴内容)操作。 – Andre 2016-07-05 17:34:09
我知道这个线程是古老的,但分配的innerHTML后,ExecWB工作对我来说:
.ExecWB 17, 0
'Select all contents in browser
.ExecWB 12, 2
'Copy them
然后把刚才的内容粘贴到Excel中。由于这些方法很容易出现运行时错误,但在调试模式下进行一两次尝试后仍可正常工作,所以如果运行时出现错误,您可能需要告诉Excel再次尝试。我解决了这个通过将此错误处理程序给分,并能正常工作:
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
你们都有有效的解决方案,并与他们极少数可以实现正是这一点。
工具需要的是正则表达式,linq,搜索引擎,vb.net或C#和互联网。
搜索“html table to dataset”。 然后搜索“没有安装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
为了简单起见我输入文件的缘故,它映射到Excel权赋予右视图中的HTML表格。但一个看法就是这样。所以我阅读它脱离元风格废话剥离和包装它在有效的html饲料它获取数据集并写出数据集。请享用。
我认为,正则表达式可以帮助你收集HTML的其他部分...
<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html>
积分去的作者说代码。我把它放在一起。
我遇到了BornToCode在原始解决方案的注释中首次发现的错误。不熟悉Excel和VBA,我花了一秒钟的时间才弄清楚如何实现tiQU的解决方案。所以我张贴在Excel下面
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
亚洲时报Siddharth,您的解决方案使我的报告看起来非常nice..Thanks这么多.. – javanoob 2012-11-28 19:10:00
这个VBA脚本失败在我的机器上的execCommand'“复制“'行,我怀疑这是因为我安装了IE11而不支持它。 – BornToCode 2014-03-23 10:37:24
同样的事情发生在我BornToCode。 – 2014-07-23 14:18:07