VB / VBA: извлечение строки HTML из буфера обмена (копируется через веб-браузер) - PullRequest
1 голос
/ 12 марта 2009

Похоже, что при копировании чего-либо из веб-браузера в буфер обмена сохраняются как минимум 2 вещи:

  1. Простой текст
  2. Исходный код HTML

Тогда программное обеспечение, в которое вы вставляете, может определить, какое оно хочет. При вставке в MS Excel 2003 у вас есть специальная опция вставки для вставки HTML, которая вставит форматированный HTML (как он отображается в браузере).

Что я хочу сделать, это вставить фактический исходный код в виде простого текста. Можно ли получить это из буфера обмена в VBA?

Редактировать Я пытаюсь получить доступ ко всему исходному коду скопированного HTML, включая теги.

Ответы [ 2 ]

3 голосов
/ 13 марта 2009

На этот раз я правильно прочитал вопрос и понял, что coonj хочет получить HTML-код из буфера обмена, включая теги.

Я считаю, что это довольно сложно. Вам необходимо прочитать буфер обмена с помощью вызовов Windows API. А затем проанализируйте полученную строку CF_HTML, в которой есть несколько дурацких заголовков, добавленных поверх HTML.

  1. Статья базы знаний Майкрософт с кодом API Windows для чтения CF_HTML из буфера обмена (функция GetHTMLClipboard).
  2. Тогда вы, вероятно, захотите проигнорировать дурацкие заголовки. Microsoft документирует формат здесь . Пример фрагмента CF_HTML показан ниже. Возможно, вы могли бы придумать какой-нибудь метод догадки, пропустив первые несколько строк.

    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>  
    

Возможно, стоит подумать, есть ли другой способ решения вашей проблемы. E, g, браузер всегда будет Internet Explorer? Можете ли вы получить то, что вам нужно, пройдясь по дереву HTML с помощью объектной модели COM?

EDIT: coonj попробовал это сейчас и говорит, что "функция GetHTMLClipboard, похоже, работает как с Firefox, так и с IE, и не похоже, что она добавляет туда эти заголовки"

0 голосов
/ 12 марта 2009

VB6 имеет объект буфера обмена, который позволяет получать данные буфера обмена в разных форматах. VBA не имеет этого объекта. Но есть вызовы API Windows, которые вы можете использовать. Вы можете увидеть пример реализации для VBA здесь .

...