Конвертировать HTML в обычный текст в VBA - PullRequest
9 голосов
/ 16 марта 2011

У меня есть лист Excel с ячейками, содержащими HTML.Как я могу конвертировать их в открытый текст?На данный момент существует так много бесполезных тегов и стилей.Я хочу написать это с нуля, но будет гораздо проще, если я смогу вывести простой текст.

Я могу написать скрипт для преобразования html в обычный текст в PHP, так что если вы не можете думать орешение в VBA, то, возможно, вы можете предложить, как я могу передать данные ячеек на веб-сайт и получить данные обратно.

Ответы [ 5 ]

17 голосов
/ 17 марта 2011

Установить ссылку на «библиотеку объектов Microsoft HTML».

Function HtmlToText(sHTML) As String
  Dim oDoc As HTMLDocument
  Set oDoc = New HTMLDocument
  oDoc.body.innerHTML = sHTML
  HtmlToText = oDoc.body.innerText
End Function

Тим

4 голосов
/ 16 марта 2011

Очень простой способ извлечь текст - сканировать символьный HTML-код и накапливать символы за пределами угловых скобок в новую строку.поможет в удалении тегов.

3 голосов
/ 03 февраля 2012

Решение Тима было великолепно, сработало, понравилось очарование.

Я хотел бы внести свой вклад: используйте этот код, чтобы добавить «Библиотеку объектов Microsoft HTML» во время выполнения:

Set ID = ThisWorkbook.VBProject.References
ID.AddFromGuid "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}", 2, 5

Работает на Windows XP и Windows 7.

0 голосов
/ 01 февраля 2019

Да!Мне удалось решить и мою проблему.Спасибо всем /

В моем случае, у меня был такой вид ввода:

<p>Lorem ipsum dolor sit amet.</p>

<p>Ut enim ad minim veniam.</p>

<p>Duis aute irure dolor in reprehenderit.</p>

И я не хотел, чтобы результат был объединен без разрывов.

Таким образом, я сначала разбил свой ввод для каждого тега <p> на массив «параграфы», затем для каждого элемента я использовал ответ Тима, чтобы получить текст из HTML (очень приятный ответ, кстати).

Кроме того, я связал каждый очищенный «абзац» с этим символом прерывания Crh(10) для VBA / Excel.

Окончательный код:

Public Function HtmlToText(ByVal sHTML As String) As String
    Dim oDoc As HTMLDocument
    Dim result As String
    Dim paragraphs() As String

    If IsNull(sHTML) Then
      HtmlToText = ""
      Exit Function
    End If

    result = ""
    paragraphs = Split(sHTML, "<p>")

    For Each paragraph In paragraphs
        Set oDoc = New HTMLDocument
        oDoc.body.innerHTML = paragraph
        result = result & Chr(10) & Chr(10) & oDoc.body.innerText
    Next paragraph

    HtmlToText = result
End Function

0 голосов
/ 01 ноября 2017

Тим ответит отлично.Тем не менее, небольшая корректировка может быть добавлена, чтобы избежать одной предсказуемой ошибки.

...