Книга: Excel. Трюки и эффекты

Преобразование таблицы Excel в HTML-формат

Преобразование таблицы Excel в HTML-формат

В процессе работы иногда возникает необходимость в быстром преобразовании табличных данных Excel в HTML-код (например, для оперативного размещения на сайте самой свежей информации). Рассмотрим на конкретном примере, каким образом можно решить эту задачу.

Предположим, что нам необходимо преобразовать в HTML-код следующую таблицу (рис. 3.17).


Рис. 3.17. Таблица Excel

В данном случае следует воспользоваться макросом, код которого приведен в листинге 3.58.

Листинг 3.58. Преобразование таблицы в HTML-формат

Sub ExportAsHtml()

Dim strStyle As String ' Параметры стиля отображения

ячейки

Dim strAlign As String ' Параметры выравнивания ячейки

Dim strOut As String ' Выходная строка с HTML-кодом

Dim cell As Object ' Обрабатываемая ячейка

Dim strCellText As String ' Текст обрабатываемой ячейки

Dim lngRow As Long ' Номер строки обрабатываемой

ячейки

Dim lngLastRow As Long ' Номер строки предыдущей ячейки

Dim strTemp As String

Dim objWordApp As Object

Dim i As Long

lngLastRow = Selection.Row

' Просмотр всех выделенных ячеек

For Each cell In Selection

' Значение строки для рассматриваемой ячейки

lngRow = cell.Row

' Если перешли на другую строку, то вставляем <tr>

If lngRow <> lngLastRow Then

strOut = strOut & vbTab & «</tr>» & vbCrLf & vbTab & _

«<tr>» & vbCrLf

' Переход на следующую строку

lngLastRow = lngRow

End If

' Задание шрифта ячейки

If Not IsNull(cell.Font.Size) Then

strStyle = « & "font-size: " & Int(100 * _

cell.Font.Size / 19) & «%;»

End If

' Для полужирного шрифта вставляем <b>

If cell.Font.Bold Then

strCellText = «<b>» & strCellText & «</b>»

End If

' Задание выравнивания

If cell.HorizontalAlignment = xlRight Then

' По правому краю

strAlign = « align=» & «right»

ElseIf cell.HorizontalAlignment = xlCenter Then

' По центру

strAlign = « align=» & «center»

Else

' По левому краю (по умолчанию)

strAlign = ""

End If

' Чтение текста в ячейке

strCellText = cell.Text

' Если нужно, то вертикальный вывод текста (в строку strTemp _

с последующим перенесением обратно в strCellText)

If cell.Orientation <> xlHorizontal Then

strTemp = ""

' Печать после каждого символа специального _

разделителя – <br>

For i = 1 To Len(strCellText)

strTemp = strTemp & Mid$(strCellText, i, 1) & «<br>»

Next i

strCellText = strTemp

strStyle = ""

End If

strOut = strOut & vbTab & vbTab & «<td» & strStyle &

strAlign _

& «>» & strCellText & «</td>» & vbCrLf

Next

' Вставка <tr> для первой строки и </tr> – для последней

strOut = vbTab & "<tr>м & vbCrLf & strOut & vbTab & "</tr>м

& vbCrLf

' Вставка дескриптора <table>

strOut = «<table border=1 cellpadding=3 cellspacing=1>» &

vbCrLf & _

strOut & vbCrLf & «</table>»

' Запускаем Word и показываем в нем сформированный HTML-код

Set objWordApp = CreateObject(«Word.Application»)

objWordApp.documents.Add

objWordApp.Selection = strOut

objWordApp.Selection.Copy

objWordApp.Visible = True

Set objWordApp = Nothing

End Sub

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

В результате применения макроса табличные данные, показанные на рис. 3.17, будут преобразованы в следующий HTML-код:

<table border=1 cellpadding=3 cellspacing=1>

<tr>

<td 52%;>77</td>

<td 52%;>345</td>

</tr>

<tr>

<td 52%; align=right>25</td>

<td 52%;>851</td>

</tr>

<tr>

<td 52%;>44</td>

<td 52%;>415</td>

</tr>

<tr>

<td 52%;>17</td>

<td 52%;>25</td>

</tr>

</table>

Читатель, хотя бы немного знакомый с веб-разработками, без труда узнает знакомый стиль HTML-файла. Этот код будет открыт в отдельном окне Microsoft Word, а также скопирован в буфер обмена.

Преобразовать выделенный диапазон в HTML-формат можно и другим способом. Его отличие от приведенного выше заключается в том, что результатом преобразования будет готовый НТМ-файл, сохраненный по указанному пути. Для реализации данного примера нужно воспользоваться макросом, код которого представлен в листинге 3.59.

Листинг 3.59. Экспорт данных в НТМ-файл

Sub ExportAsHtmlFile()

Dim strStyle As String ' Параметры стиля отображения

ячейки

Dim strAlign As String ' Параметры выравнивания ячейки

Dim strOut As String ' Выходная строка с HTML-кодом

Dim cell As Object ' Обрабатываемая ячейка

Dim strCellText As String ' Текст обрабатываемой ячейки

Dim lngRow As Long ' Номер строки обрабатываемой

ячейки

Dim lngLastRow As Long ' Номер строки предыдущей ячейки

Dim strTemp As String

Dim strFileName As String ' Имя файла для сохранения HTML-

кода

Dim i As Long

' Запрос у пользователя имени файла для сохранения

strFileName = Application.GetSaveAsFilename( _

InitialFileName:="Primer.htm", _

fileFilter:="HTML Files(*.htm), *.htm")

' Проверка, задал ли пользователь имя файла (если нет, _

то можно выходить)

If strFileName = "" Then Exit Sub

lngLastRow = Selection.Row

' Просмотр всех выделенных ячеек

For Each cell In Selection

' Значение строки для рассматриваемое ячейки

lngRow = cell.Row

' Если перешли на другую строку, то вставляем <tr>

If lngRow <> lngLastRow Then

strOut = strOut & vbTab & «</tr>» & vbCrLf & vbTab & _

«<tr>» & vbCrLf

' Переход на следующую сроку

lngLastRow = lngRow

End If

' Задание шрифта ячейки

If Not IsNull(cell.Font.Size) Then

strStyle = « & "font-size: " & Int(100 * _

cell.Font.Size / 19) & «%;»

End If

' Для полужирного шрифта вставляем <b>

If cell.Font.Bold Then

strCellText = «<b>» & strCellText & «</b>»

End If

' Задание выравнивания

If cell.HorizontalAlignment = xlRight Then

' По правому краю

strAlign = « align=» & «right»

ElseIf cell.HorizontalAlignment = xlCenter Then

' По центру

strAlign = « align=» & «center»

Else

' По левому краю (по умолчанию)

strAlign = ""

End If

' Чтение текста в ячейке

strCellText = cell.Text

' Если нужно, то вертикальный вывод текста (в строку strTemp _

с последующим перенесением обратно в strCellText)

If cell.Orientation <> xlHorizontal Then

strTemp = ""

' Печать после каждого символа специального _

разделителя – <br>

For i = 1 To Len(strCellText)

strTemp = strTemp & Mid$(strCellText, i, 1) & «<br>»

Next i

strCellText = strTemp

strStyle = ""

End If

strOut = strOut & vbTab & vbTab & «<td» & strStyle & _

strAlign & «>» & strCellText & «</td>» & vbCrLf

Next

' Вставка <tr> для первой строки и </tr> – для последней

strOut = vbTab & «<tr>» & vbCrLf & strOut & vbTab & «</tr>»

& vbCrLf

' Вставка дескриптора <table>

strOut = «<table border=1 cellpadding=3 cellspacing=1>» _

& vbCrLf & strOut & vbCrLf & «</table>»–

' Сохранение HTML-кода в файл

Open strFileName For Output As 1

Print #1, strOut

Close 1

' Вывод окна с информационным сообщением о результатах работы

MsgBox Selection.Count & " ячеек экспортировано в файл " & _

strFileName

End Sub

После написания кода будет создан макрос ExportAsHtmlFile, результатом работы которого будет сформированный файл Primer.htm (не стоит забывать, что перед выполнением макроса необходимо выделить диапазон, данные которого должны быть преобразованы в HTML-формат). Путь для сохранения по обычным правилам Windows указывается в окне, которое открывается на экране сразу после запуска макроса (в этом же окне можно изменить имя создаваемого файла, которое предлагается по умолчанию). По окончании преобразования на экране отобразится окно, в котором пользователю сообщается количество преобразованных ячеек и путь к созданному НТМ-файлу.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.292. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз