macro VBA para remover tudo antes e depois da tag div [duplicate]

0

Estou criando um relatório com uma coluna com muitas células que possuem tags HTML em quase todas as caixas. Estou tentando criar uma macro VBA que removerá algumas tags HTML dessa coluna.

Então, em uma situação, eu tenho:

<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>

Acabei de listar apenas algumas tags HTML, mas há mais.

O que eu quero é extrair apenas o conteúdo entre as tags <div class=...> e manter a própria tag div. O resto deve ser removido

<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>

Alguém sabe uma maneira de fazer isso?

    
por becoolflyer 24.01.2014 / 13:42

2 respostas

0

Você pode simplesmente usar o Excel para localizar e substituir.

Procure a tag como <h1> e substitua-a por nada (vazio / espaço em branco). Em seguida, faça o mesmo com a tag de fechamento '', que deixará o conteúdo.

EG

<h1>My content</h1>

se tornará

My content

Para outras tags, se você precisar remover tags e conteúdo, use o caractere curinga * .

Pesquise <p>*</p> e substitua por espaço em branco! Isso removerá a entrada inteira.

E para guias de fechamento automático, como o IMG, você pode fazer <img*/>

    
por 24.01.2014 / 14:26
0

Isso deve ser retirado, substituir o msgbox com o local em que você deseja imprimir o valor e ajustar o intervalo de acordo. Se estes não forem específicos, cells , você poderá pesquisar por 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

por exemplo, em vez de msgbox(svalue) , você poderia usar

dim k as integer
k=1

worksheets("sheet2").cells(k,1) = svalue
k=k+1

para movê-lo para outra planilha.

Se você tem um pouco de <div class que não tem </div> ou nada dentro, lance on error resume next

    
por 24.01.2014 / 15:31