<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
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
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
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
6 回答
是的,这是可能的:)事实上让Internet Explorer为你做脏事;)
TRIED AND TESTED
MY ASSUMPTIONS
我假设html文本在Sheet1的单元格A1中 . 您也可以使用变量 .
如果您的列中包含html值,则只需将下面的代码放在循环中即可
CODE
SNAPSHOT
HTH
希德
您可以将HTML代码复制到剪贴板,然后将其作为Unicode文本粘贴回来 . Excel将在单元格中呈现HTML . 看看这篇文章http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
帖子中的相关宏代码:
如果IE示例不起作用,请使用此示例 . 无论如何,这应该比启动IE实例更快 .
这是一个完整的解决方案
http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/
请注意,如果你的innerHTML是所有数字,例如'12345',那么HTML格式在excel中完全不起作用,因为它对数字的处理方式不同?但最后添加一个字符,例如尾随空格 . 12345“&nbsp;”格式好 .
我知道这个帖子很古老,但在分配innerHTML后,ExecWB为我工作:
然后将内容粘贴到Excel中 . 由于这些方法容易出现运行时错误,但在调试模式下一次或两次尝试后工作正常,您可能必须告诉Excel如果遇到错误再试一次 . 我通过将此错误处理程序添加到sub解决了这个问题,它工作正常:
我遇到了BornToCode在原始解决方案的评论中首次发现的相同错误 . 由于不熟悉Excel和VBA,我花了一秒钟才弄清楚如何实现tiQU的解决方案 . 因此,我将其发布为下面的“For Dummies”解决方案
首先在Excel中启用开发人员模式:Link
选择“开发人员”选项卡>“Visual Basic”
单击视图>代码
粘贴下面的代码,更新需要单元格引用正确的行 .
单击绿色运行箭头或按F5
你们都有有效的解决方案,而且只有少数几个你可以实现这个 .
工具需要的是正则表达式,linq,搜索引擎,vb.net或C#和互联网 .
搜索“html table to dataset” . 然后搜索“数据集到excel而不安装excel” .
我认为用这些术语你可以将它组合在一起 . ;)
但这里有一些解决方案 .
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的其他部分...
致记于所述代码的作者 . 我把它放在一起 .