我有一张包含html的单元格的Excel表格。如何将它们批量转换为纯文本?目前有这么多无用的标签和风格。我想从头开始编写它,但如果我能得到明文,那将会容易得多。
我可以编写一个脚本来将PHP转换为纯文本,这样如果您无法想到VBA中的解决方案,那么您可以了解我如何将单元数据传递到网站并检索数据。 / p>
答案 0 :(得分:17)
设置对“Microsoft HTML对象库”的引用。
Function HtmlToText(sHTML) As String
Dim oDoc As HTMLDocument
Set oDoc = New HTMLDocument
oDoc.body.innerHTML = sHTML
HtmlToText = oDoc.body.innerText
End Function
添
答案 1 :(得分:4)
提取文本的一种非常简单的方法是逐个字符扫描HTML字符,并将尖括号外的字符累积到新字符串中。
Function StripTags(ByVal html As String) As String
Dim text As String
Dim accumulating As Boolean
Dim n As Integer
Dim c As String
text = ""
accumulating = True
n = 1
Do While n <= Len(html)
c = Mid(html, n, 1)
If c = "<" Then
accumulating = False
ElseIf c = ">" Then
accumulating = True
Else
If accumulating Then
text = text & c
End If
End If
n = n + 1
Loop
StripTags = text
End Function
这可能会留下大量无关的空白,但它有助于删除标记。
答案 2 :(得分:3)
我想贡献:使用此代码在运行时添加“Microsoft HTML Object Library”:
Set ID = ThisWorkbook.VBProject.References
ID.AddFromGuid "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}", 2, 5
适用于Windows XP和Windows 7。
答案 3 :(得分:1)
这是Tim和Gardoglee解决方案的一种变体,不需要设置对“ Microsoft HTML对象库”的引用。这种方法称为 Late Binding (后期绑定),在vbscript中也可以使用。
Function HtmlToText(sHTML) As String
Dim oDoc As Object ' As HTMLDocument
If IsNull(sHTML) Then
HtmlToText = ""
Exit Function
End If
Set oDoc = CreateObject("HTMLFILE")
oDoc.body.innerHTML = sHTML
HtmlToText = oDoc.body.innerText
End Function
请注意,如果您在 Access 2007或更高版本中使用VBA,则内置的Application.PlainText()方法与上面的代码具有相同的作用。
答案 4 :(得分:0)
Function HtmlToText(sHTML) As String
Dim oDoc As HTMLDocument
If IsNull(sHTML) Then
HtmlToText = ""
Exit Function
End-If
Set oDoc = New HTMLDocument
oDoc.body.innerHTML = sHTML
HtmlToText = oDoc.body.innerText
End Function
答案 5 :(得分:0)
是的!我也设法解决了我的问题。谢谢大家/
就我而言,我有这种输入:
<p>Lorem ipsum dolor sit amet.</p>
<p>Ut enim ad minim veniam.</p>
<p>Duis aute irure dolor in reprehenderit.</p>
我不希望结果没有中断线而被卡在一起。
因此,我首先将每个<p>
标签的输入都分成一个数组“ paragraphs”,然后对于每个元素,我使用Tim的答案将文本从html中提取出来(非常好回答btw)。
此外,对于VBA / Excel,我将每个清理的“段落”与该换行符Crh(10)
串联在一起。
最终代码为:
Public Function HtmlToText(ByVal sHTML As String) As String
Dim oDoc As HTMLDocument
Dim result As String
Dim paragraphs() As String
If IsNull(sHTML) Then
HtmlToText = ""
Exit Function
End If
result = ""
paragraphs = Split(sHTML, "<p>")
For Each paragraph In paragraphs
Set oDoc = New HTMLDocument
oDoc.body.innerHTML = paragraph
result = result & Chr(10) & Chr(10) & oDoc.body.innerText
Next paragraph
HtmlToText = result
End Function