VB/VBA:Buscar string HTML da área de transferência (copiada via navegador da web)
Pergunta
Parece que quando você copia algo de um navegador da web para a área de transferência, pelo menos duas coisas são armazenadas:
- Texto simples
- Código-fonte HTML
Então cabe ao software que você está colando determinar qual deles deseja.Ao colar em Excel 2003, você tem uma opção especial de colar HTML, que colará o HTML formatado (conforme exibido pelo navegador).
O que eu quero fazer é colar o código-fonte real como texto simples.Isso pode ser obtido na área de transferência no VBA?
Editar Estou tentando acessar todo o código-fonte do HTML copiado, inclusive as tags.
Solução
Desta vez eu li a pergunta corretamente e percebi coonj deseja obter o HTML da área de transferência, incluindo tags.
Acredito que isso seja razoavelmente difícil.Você precisa ler a área de transferência usando chamadas de API do Windows.E então, analise a string CF_HTML resultante que tem alguns cabeçalhos malucos adicionados no topo do HTML.
- Artigo da Base de Conhecimento Microsoft com o código API do Windows para ler o CF_HTML da área de transferência (função GetHTMLClipboard).
Você provavelmente desejará ignorar os cabeçalhos malucos.Microsoft documenta o formato aqui.Um exemplo de fragmento CF_HTML é mostrado abaixo.Você provavelmente poderia criar algum método de adivinhação para pular as primeiras linhas.
Version:0.9 StartHTML:71 EndHTML:170 StartFragment:140 EndFragment:160 StartSelection:140 EndSelection:160 <!DOCTYPE> <HTML> <HEAD> <TITLE>The HTML Clipboard</TITLE> <BASE HREF="http://sample/specs"> </HEAD> <BODY> <!--StartFragment --> <P>The Fragment</P> <!--EndFragment --> </BODY> </HTML>
Também pode valer a pena pensar se existe alguma outra maneira de resolver o seu problema.Por exemplo, o navegador sempre será o Internet Explorer?Você consegue o que precisa percorrendo a árvore HTML usando o modelo de objeto COM?
EDITAR: coonj tentou isso agora e diz "a função GetHTMLClipboard parece funcionar tanto com o Firefox quanto com o IE, e não parece que esteja jogando esses cabeçalhos lá"
Outras dicas
VB6 tem o objeto Clipboard que lhe permite obter os dados da área de transferência em diferentes formatos. O VBA não tem este objeto. Mas há janelas chamadas de API que você pode usar. Você pode ver uma implementação de exemplo para VBA aqui .