Текст 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 делает грязную работу за вас;)
ПРОВЕРЕННЫЕ
МОИ ПРЕДПОЛОЖЕНИЯ
- я предполагаю, что текст html находится в ячейке A1 листа 1. Вместо этого можно использовать переменную.
- если у вас есть столбец, полный значений 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
снимок
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. Поэтому я публикую его как решение" для чайников " ниже
- сначала включите режим разработчика в Excel:ссылке
- выберите вкладку Разработчик > Visual Basic
- Нажмите Кнопку "Просмотр" > Код
- вставьте код ниже обновления строк это требует, чтобы ссылки на ячейки были правильными.
- Нажмите зеленую стрелку запуска или нажмите 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>
кредиты идут авторам указанного кода. Я просто собрал все воедино.