Текст HTML с тегами для форматирования текста в ячейке Excel

есть ли способ взять HTML и импортировать его в excel, чтобы он был отформатирован как богатый текст (предпочтительно с помощью VBA)? В принципе, когда я вставляю в ячейку Excel, я хочу повернуть это:

<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>

в:

Это тест. Будет ли этот текст полужирный или курсив

6 ответов


Да, это возможно :) на самом деле пусть Internet Explorer делает грязную работу за вас;)

ПРОВЕРЕННЫЕ

МОИ ПРЕДПОЛОЖЕНИЯ

  1. я предполагаю, что текст html находится в ячейке A1 листа 1. Вместо этого можно использовать переменную.
  2. если у вас есть столбец, полный значений html, то просто поместите приведенный ниже код в петля

код

Sub Sample()
    Dim Ie As Object

    Set Ie = CreateObject("InternetExplorer.Application")

    With Ie
        .Visible = False

        .Navigate "about:blank"

        .document.body.InnerHTML = Sheets("Sheet1").Range("A1").Value

        .document.body.createtextrange.execCommand "Copy"
        ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("A1")

        .Quit
    End With
End Sub

снимок

enter image description here

HTH

Sid


вы можете скопировать HTML-код в буфер обмена и вставить его обратно в виде текста Unicode. Excel отобразит HTML в ячейке. Проверьте этот пост http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

соответствующий код макроса из сообщения:

Private Sub Worksheet_Change(ByVal Target As Range)

   Dim objData As DataObject
   Dim sHTML As String
   Dim sSelAdd As String

   Application.EnableEvents = False

   If Target.Cells.Count = 1 Then
      If LCase(Left(Target.Text, 6)) = "<html>" Then
         Set objData = New DataObject

         sHTML = Target.Text

         objData.SetText sHTML
         objData.PutInClipboard

         sSelAdd = Selection.Address
         Target.Select
         Me.PasteSpecial "Unicode Text"
         Me.Range(sSelAdd).Select

      End If
   End If

   Application.EnableEvents = True

End Sub

Если пример IE не работает, используйте этот. В любом случае это должно быть быстрее, чем начинать экземпляр ИП.

вот полное решение на основе on
http://www.dailydoseofexcel.com/archives/2005/02/23/html-in-cells-ii/

Примечание, Если ваш innerHTML-это все числа, например "12345", форматирование HTML dosen не полностью работает в excel, поскольку он обрабатывает номер по-разному? но добавьте символ, например пробел в конце, например. 12345 + форматы" & nbsp;" ладно.

Sub test()
    Cells(1, 1).Value = "<HTML>1<font color=blue>a</font>" & _
                        "23<font color=red>4</font></HTML>"
    Dim rng As Range
    Set rng = ActiveSheet.Cells(1, 1)
    Worksheet_Change rng, ActiveSheet
End Sub


Private Sub Worksheet_Change(ByVal Target As Range, ByVal sht As Worksheet)

    Dim objData As DataObject ' Set a reference to MS Forms 2.0
    Dim sHTML As String
    Dim sSelAdd As String

    Application.EnableEvents = False

    If Target.Cells.Count = 1 Then

            Set objData = New DataObject
            sHTML = Target.Text
            objData.SetText sHTML
            objData.PutInClipboard
            Target.Select
            sht.PasteSpecial Format:="Unicode Text"
    End If

    Application.EnableEvents = True

End Sub

Я знаю, что этот поток древний, но после назначения innerHTML ExecWB работал для меня:

.ExecWB 17, 0
'Select all contents in browser
.ExecWB 12, 2
'Copy them

а затем просто вставьте содержимое в Excel. Поскольку эти методы склонны к ошибкам во время выполнения, но работают нормально после одной или двух попыток в режиме отладки, Вам может потребоваться сказать Excel попробовать еще раз, если он столкнется с ошибкой. Я решил это, добавив этот обработчик ошибок в sub, и он отлично работает:

Sub ApplyHTML()
  On Error GoTo ErrorHandler
    ...
  Exit Sub

ErrorHandler:
    Resume 
    'I.e. re-run the line of code that caused the error
Exit Sub
     
End Sub

я столкнулся с той же ошибкой, которую BornToCode впервые идентифицировал в комментариях исходного решения. Будучи незнакомым с Excel и VBA, мне потребовалась секунда, чтобы понять, как реализовать решение tiQU. Поэтому я публикую его как решение" для чайников " ниже

  1. сначала включите режим разработчика в Excel:ссылке
  2. выберите вкладку Разработчик > Visual Basic
  3. Нажмите Кнопку "Просмотр" > Код
  4. вставьте код ниже обновления строк это требует, чтобы ссылки на ячейки были правильными.
  5. Нажмите зеленую стрелку запуска или нажмите F5
Sub Sample()
    Dim Ie As Object
    Set Ie = CreateObject("InternetExplorer.Application")
    With Ie
        .Visible = False
        .Navigate "about:blank"
        .document.body.InnerHTML = Sheets("Sheet1").Range("I2").Value
             'update to the cell that contains HTML you want converted
        .ExecWB 17, 0
             'Select all contents in browser
        .ExecWB 12, 2
             'Copy them
        ActiveSheet.Paste Destination:=Sheets("Sheet1").Range("J2")
             'update to cell you want converted HTML pasted in
        .Quit
    End With
End Sub

вы все действительные решения, и с несколькими из них вы можете реализовать именно это.

инструменты нужны регулярные выражения, linq, поисковая система, vb.net или C# и интернет.

Поиск "html таблицы в набор данных". Затем выполните поиск "dataset to excel без установленного excel".

Я думаю, что с этими терминами вы могли бы собрать его вместе. ;)

но вот некоторые решение.

           Using sr As StreamReader = New StreamReader(fileName, Encoding.UTF8)
                result = sr.ReadToEnd()
            End Using
            result = result.Substring(result.IndexOf("<tab"))
            Dim sb As New StringBuilder
            sb.AppendLine("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">")
            sb.AppendLine("<html>")
            sb.AppendLine("<head>")
            sb.AppendLine("<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1" > "")
            sb.AppendLine("<title>Title</title>")
            sb.AppendLine("</head>")
            sb.AppendLine("<body>")
            sb.Append(result)
            sb.AppendLine("</body>")
            sb.AppendLine("</html>")
            result = sb.ToString()
            File.Move(fileName, System.IO.Path.GetFileNameWithoutExtension(fileName) + ".txt")
            Dim ds As DataSet = GetTableAsDataSet.ConvertHTMLTablesToDataSet(result)
            If (DataSetToExcel.WriteXLSFile(fileName, ds) = True) Then

http://www.dotnetfunda.com/articles/show/51/convert-html-tables-to-a-dataset

http://www.codeproject.com/Tips/313731/How-to-convert-DataSet-to-Excel-workbook-xls-using

для простоты мой входной файл-это html-таблица, которая отображает в excel право, давая правильный вид. Но посмотреть все это. поэтому я прочитал его в strip off meta styling дерьмо и оберните его в действительный html-канал, чтобы получить набор данных и запись данных. наслаждаться.

Я думаю, что регулярное выражение может помочь вам собрать другую часть html...

<table[^>]*>(.*?)</table> == <html[^>]*>(.*?)</html> 

кредиты идут авторам указанного кода. Я просто собрал все воедино.