我正在创建一份报告,其中有一列包含许多单元格,几乎每个框中都有 HTML 标签。我正在尝试创建一个 VBA 宏,用于从此列中删除一些 HTML 标签。
因此,在一种情况下,我有:
<h1>text text.........text</h1>
<p>text text.........text</p>
<div class="Take"> text text.........text </div>
<p>text text.........text</p>
<div class="Found">
<div class="Deficient">
<p>text text.........text</p>
<p>text text.........text</p>
<img>....</img>
我仅仅列出了一些 HTML 标签,但还有更多。
我想要的是只提取标签之间的内容<div class=...>
并保留 div 标签本身。其余部分应删除
<h1>text text.........text</h1>
<div class="Take"> text text.........text </div>
<div class="Found"> text text.........text </div>
<div class="Deficient"> text text.........text </div>
有人知道怎么做这个吗?
答案1
您可以使用 Excel 查找和替换。
搜索诸如的标签<h1>
并将其替换为空(空白/空格)。然后对结束标签 '' 执行相同操作,这将保留内容。
例如
<h1>My content</h1>
会变成
My content
对于需要删除标签和内容的其他标签,请使用通配符*
。
搜索<p>*</p>
并替换为空格!这将删除整个条目。
对于自动关闭的标签,比如 IMG,你可以这样做<img*/>
答案2
这应该会将其拉出,将 msgbox 替换为您想要打印值的位置,并相应地调整范围。如果这些不具体,cells
那么您可以尝试通过搜索row
。
Sub test()
Dim c As Range
Dim sFound As String
Dim sValue As String
Dim i As Long
Dim j As Long
For Each c In Range("A:A")
If Not c.Find("<div class") Is Nothing Then
sFound = c.Value
i = InStr(sFound, ">")
j = InStr(sFound, "</div")
sValue = Mid(sFound, i + 1, j - i - 1)
MsgBox (sValue)
End If
Next c
End Sub
例如,msgbox(svalue)
你可以使用
dim k as integer
k=1
worksheets("sheet2").cells(k,1) = svalue
k=k+1
将其移动至另一张工作表。
如果你有一些<div class
里面没有东西</div>
或什么都没有的东西,扔进on error resume next