Aquí podría ser tu PUBLICIDAD


VB / VBA: Obtener cadena HTML desde el portapapeles (copiado a través del navegador web)

votos
1

Parece que al copiar algo de un navegador web al portapapeles, se almacenan al menos 2 cosas:

  1. Texto sin formato
  2. Código fuente HTML

Luego depende del software al que está pegando y puede determinar cuál quiere. Al pegar en MS Excel 2003 , tiene una opción especial pegar para pegar HTML, que pegará el HTML formateado (tal como lo muestra el navegador).

Lo que quiero hacer es pegar el código fuente real como texto sin formato. ¿Se puede obtener esto desde el portapapeles en VBA?

Editar . Estoy intentando acceder a todo el código fuente del HTML copiado, incluidas las etiquetas.

Publicado el 12/03/2009 a las 19:26
fuente por usuario Jason Coon
En otros idiomas...        العربية       

2 respuestas

votos
3

Esta vez he leído la pregunta correctamente y me di cuenta de que Coonj quiere obtener el HTML del portapapeles, incluidas las etiquetas.

Creo que esto es bastante difícil. Necesita leer el portapapeles usando llamadas a la API de Windows. Y luego, analizar la cadena resultante CF_HTML que tiene algunos encabezados extraños añadidos sobre el HTML.

  1. Artículo de Microsoft Knowledge Base con el código API de Windows para leer el CF_HTML del portapapeles (función GetHTMLClipboard).
  2. Probablemente quieras ignorar los encabezados extravagantes. Microsoft documenta el formato aquí . Un ejemplo de fragmento CF_HTML se muestra a continuación. Probablemente se te ocurra algún método de adivinar salteando las primeras líneas.

    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>  
    

También podría valer la pena pensar si hay alguna otra forma de resolver su problema. E, g, ¿El navegador siempre será Internet Explorer? ¿Puedes obtener lo que necesitas recorriendo el árbol HTML con el modelo de objetos COM?

EDITAR: coonj ha intentado esto ahora y dice "la función GetHTMLClipboard parece funcionar tanto con Firefox como con IE, y no parece que esté lanzando esos encabezados allí"

Respondida el 12/03/2009 a las 11:41
fuente por usuario MarkJ


Aquí podría ser tu PUBLICIDAD


votos
0

VB6 tiene el objeto Clipboard que le permite obtener los datos del portapapeles en diferentes formatos. VBA no tiene este objeto. Pero hay llamadas a la API de Windows que puedes usar. Puede ver una implementación de muestra para VBA aquí .

Respondida el 12/03/2009 a las 07:33
fuente por usuario Will Rickards