Макрос предназначен для экспорта выделенного диапазона ячеек книги Excel в код HTML.
Результат (HTML код таблицы) помещается в буфер обмена.
Первая строка выделенного диапазона ячеек считается заголовком таблицы (обрамляется тегами <th> вместо <td>)
Например, мы имеем изначально такую таблицу Excel, где мы выделили диапазон ячеек A1:D9
Запускаем макрос — и в буфере обмена Windows появляется следующий HTML-код:
После вставки этого кода на веб-страницу, видим следующее:
ФИО | Правильный результат склонения | Новая формула — DativeCase | Совпадение |
---|---|---|---|
БАРАШ Лев Юрьевич | БАРАШУ Льву Юрьевичу | Барашу Льву Юрьевичу | ИСТИНА |
Абраамян Оганес Дереникович | Абраамяну Оганесу Дерениковичу | Абраамяну Оганесу Дерениковичу | ИСТИНА |
Абрамян Артур Александрович | Абрамяну Артуру Александровичу | Абрамяну Артуру Александровичу | ИСТИНА |
Абрамян Назар Вачаганович | Абрамяну Назару Вачагановичу | Абрамяну Назару Вачагановичу | ИСТИНА |
Абросимов Антон Владимирович | Абросимову Антону Владимировичу | Абросимову Антону Владимировичу | ИСТИНА |
АГАФОНОВ Иван Николаевич | АГАФОНОВУ Ивану Николаевичу | Агафонову Ивану Николаевичу | ИСТИНА |
Агафонов Константин Викторович | Агафонову Константину Викторовичу | Агафонову Константину Викторовичу | ИСТИНА |
Агеев Антон Сергеевич | Агееву Антону Сергеевичу | Агееву Антону Сергеевичу | ИСТИНА |
Собственно, сам код макроса для экспорта таблицы Excel в HTML:
Sub ExportHTML() ' макрос для экспорта выделенного диапазона ячеек в HTML On Error Resume Next Selection.Areas(1).Select ' на случай выделения несвязанных диапазонов iFirstLine = Selection.Row iFirstCol = Selection.Column iLastLine = iFirstLine + Selection.Rows.Count - 1 iLastCol = iFirstCol + Selection.Columns.Count - 1 'HTML классы для таблицы и четного ряда данных sTableClass = "ExcelTable" sOddRowClass = "odd" sOutput = "<div><table class='" & sTableClass & "' border=1 width=500px align=center>" ' Начинаем таблицу 'sOutput = sOutput & "<caption>" & Cells(iFirstLine, iFirstCol).Text & "</caption>" For k = iFirstLine To iLastLine ' Обрабатываем Excel таблицу If (k 2 <> k / 2) Then 'проверяем на четность sLine = "<tr class ='" & sOddRowClass & "'>" Else sLine = "<tr>" End If iCountColspan = 0 'счетчик объединенных ячеек For j = iFirstCol To iLastCol 'Проверяем, не объединена ли эта ячейка с соседними. If Cells(k, j).MergeCells = True Then 'Получаем число объединенных ячеек iCountColspan = Cells(k, j).MergeArea.Count Else iCountColspan = 0 End If Set oCurrentCell = ActiveSheet.Cells(k, j) sLine = sLine & "<td" 'Проверяем, нужно ли вставлять код объединения ячейки с соседними If iCountColspan > 1 Then sLine = sLine & " colspan=" & iCountColspan j = j + iCountColspan - 1 'пропускаем ячейки iCountColspan = 0 End If 'Если по центру If oCurrentCell.HorizontalAlignment = -4108 Then sLine = sLine & " style='text-align: center;'" sLine = sLine & ">" 'Если пусто, прописываем If oCurrentCell.Text <> "" Then sValue = oCurrentCell.Text Else sValue = " " 'Если жирный If oCurrentCell.Font.Bold = True Then sValue = "<b>" & sValue & "</b>" 'Если курсив If oCurrentCell.Font.Italic = True Then sValue = "<i>" & sValue & "</i>" sLine = sLine & sValue & "</td>" If k = iFirstLine Then sLine = Replace(sLine, "<td", "<th") Next j sOutput = sOutput & sLine & "</tr>" Next k sOutput = sOutput & "</table></div>" 'Заканчиваем таблицу ' Копируем полученный HTML в буфер обмена With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText sOutput: .PutInClipboard End With End Sub
PS: За основу взят код из блога Максима Тарлюн
I received an interesting question today – on how to easily publish an Excel file to a web page. Although there are a ton of ways to approach this problem (ranging from Excel Services in SharePoint to Excel Interop or ClosedXML) let us say we want to restrict to using only Excel and VBA. Printing Excel to HTML is a very useful feature if you want to publish your data/Workbook online.
The concept itself is very simple as HTML files are text files and therefore the problem is only to structure the data correctly in VBA before saving it to a HTML file.
I wanted to explore today 2 options:
- Generating a HTML file via VBA
- Generating a HTML file via the Publish feature in Excel
Both options are fairly useful ones – with the first one offering more flexibility and the second one being much easier to use.
Generating HTML via VBA
So lets start with the simple example of generating an Excel file from scratch just with VBA.
We have the following Excel table (ranging from A1 to C3):
The Code
Sub Test() RangeToHtml Range("A1:C3"), "test.html" End Sub Sub RangeToHtml(rng As Range, fileName As String) Dim resBeg As String resBeg = "<html><head></head><body><table>" resEnd = "</table></body></html>" For i = 1 To rng.Rows.Count '---Rows--- resBeg = resBeg & "<tr>" For j = 1 To rng.Columns.Count '---Columns--- resBeg = resBeg & "<td>" resBeg = resBeg & rng.Cells(i, j).Value resBeg = resBeg & "</td>" Next j resBeg = resBeg & "</tr>" Next i Call SaveStringToFile(resBeg & resEnd, fileName) End Sub Sub SaveStringToFile(str As String, fileName As String) Open fileName For Output As #1 Print #1, str Close #1 End Sub
Excel to HTML: The result
Lets see the result (actual HTML posted to this page):
Col1 | Col2 | Col3 |
1 | 2 | 3 |
4 | 5 | 6 |
Nothing extraordinary – just a very simple table without any formatting.
What the code does is traverse through the Excel Range replacing rows with the
tag and columns (or rather cells) with the
tag inserting the cell’s contents within. A very simple example.
Excel Publish to HTML feaure
The Publish to HTML feature is a neat capability that allows you to export your entire Workbook as a HTML web page through which you can easily navigate. You can easily Publish your Excel Workbook from VBA or directly from Excel.
To publish the Excel file go to Save As and select Publish to configure the publish options:
Alternatively you can use the VBA code below to achieve the same:
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _ "PublishToHtml.htm", ";Sheet1", "$A$1:$C$4", _ xlHtmlStatic, "PublishToHtml", "") .Publish (True) End With
Easy as that! The additional advantage is that the Publish to Excel feature will keep some of your formatting settings e.g. bold, italic fonts etc. Some, however, usually will be omitted e.g. borders.
Conclusions
Without resorting to external solutions there are least 2 easy options of generating html files from Excel. Personally I would prefer to have control over my HTML file and use VBA possibly adding my own css styles and formatting.
Как преобразовывать таблицы Excel в HTML
Смотрите также sLine = Replace(sLine, желают получить дополнительные на листе Excel. следует нажать на нужно их выделить окна установки следуети щелкнуть по в форматы Excel, папку в другое преобразуете Ваши листыЕсли включить параметр вспомогательная папка скопирована Excel, не оченьFile namesh данные как веб-страницуЕсли Вы создали симпатичную
Преобразуем таблицы Excel в HTML при помощи инструмента «Сохранить как веб-страницу»
«» Next k возможности, например, производить Но это ещё кнопку Преимущество данного способа нажать на кнопку кнопке а именно XLS, место. Более подробно Excel в HTML:AutoRepublish в то же
чистый! Будет здорово,(Имя файла) и(Публикуемые элементы). Здесь и дополнительно создадите таблицу в Excel sOutput = sOutput массовую конвертацию объектов не всё. Нам«OK» перед стандартным преобразованием«Finish»«Next»
XLSX, XLSB или об этом смотритеУ(Автопереиздание), то каждый место, иначе ссылки когда, преобразовав большую
- выберите папку на Вы выбираете, какие папку, в которой и теперь хотите & « по указанному направлению, необходимо сохранить документ. HTML в Excel.. XLSM, то неопытный
- в разделе Вспомогательныесловное форматирование раз при сохранении будут неверными. Если таблицу со сложным
- жёстком диске, веб-папку, части рабочей книги будут храниться все опубликовать её как» ‘Заканчиваем таблицу можно порекомендовать приобрести в нужном формате.После этого можно приступить заключается в том,Важно знать, что передПосле этого открывается окно, пользователь может взяться файлы и гиперссылки.
- не поддерживается при рабочей книги будет Вы повторно сохраняете дизайном, Вы откроете веб-сервер, HTPP или Excel необходимо экспортировать вспомогательные файлы для веб-страницу, то простейший ‘ Копируем полученный одну из специализированных
- Для этого кликаем непосредственно к процедуре что можно выбирать запуском утилиты Launch в котором указывается, за голову. НоНа веб-странице отображается красный сохранении листа Excel появляться сообщение с веб-страницу в другое её в любом FTP-адрес, куда требуется в веб-страницу. В корректного отображения веб-страницы
- способ это сделать HTML в буфер платных утилит. по пиктограмме в конвертации. Для этого и конвертировать сразу Abex HTML to
- куда именно будет на самом деле крест (Х) как просьбой подтвердить, хотите место, Microsoft Excel редакторе HTML и сохранить веб-страницу. выпадающем списке
(картинки, кнопки и – экспортировать её обмена With GetObject(«New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}»)Автор: Максим Тютюшев виде дискеты в на верхней панели несколько объектов. После Excel Converter, как устанавливаться программа. Конечно, ничего страшного тут. Красный крестик обозначает
- Single File Web Page ли Вы включить скопирует следом вспомогательную почистите код передСовет:Choose текстуры для фона). в старый добрый .SetText sOutput: .PutInClipboardrom777
- левом верхнем углу следует нажать на того, как файлы бы он не при желании можно нет. Конвертация в не обнаруженный рисунок(Веб-страница в оном или отключить автопереиздание. папку автоматически. публикацией. В результате
- Если Вы впервые(Выбрать) есть следующиеSingle File Web файл HTML. В End With ‘: Здравствуйте. окна.
- кнопку выделены, жмем на проводился, вручную или изменить директорию, но современных версиях Excel или другой графический файле), поэтому убедитесь, Если необходимо, чтобыЕсли Вы сохраняете веб-страницы страница на сайте преобразуете рабочую книгу варианты:Page этой статье мы Копируем полученный HTML
- На просторах интернетаОткрывается окошко, в котором«Convert» кнопку сразу после установки без особой нужды встроенными инструментами программы элемент. Причина скорее что Вы сохраняете
- лист Excel автоматически в разные места будет загружаться заметно Excel в файлEntire workbook(Веб-страница в одном рассмотрим несколько способов в файл Filename нашёл файл-помощник для говорится, что существующий.«Открыть» приложения, следует завершить
- делать это не выполняется довольно просто всего таже, что его как опубликовывался, тогда выбираем или если файл быстрее. HTML, то будет(Всю книгу) – файле) – так конвертировать данные из = «G:test.html» ‘задаём
- переноса прайса из документ может иметьЗатем будет выполнена процедура. работу и закрыть рекомендуется. Так что и в большинстве и при нерабочихWeb PageEnable… Excel содержит гиперссылки
Используя инструмент «Сохранить как разумно сначала сохранить опубликована будет вся Вы сохраните рабочую Excel в HTML, здесь полный путь таблицы Excel в возможности, несовместимые с преобразования. После еёВыбранные объекты будут отображены все программы пакета просто жмем на случаев относительно корректно.
- гиперссылках. Просто убедитесь,(Веб-страница). Гистограммы, цветовые(Включить…) и жмём на внешние веб-сайты, Веб-страницу», важно понимать, веб-страницу на жёсткий книга, включая все книгу или выделенные определим плюсы и к файлу Set HTML: форматом веб-страницы. Жмем завершения откроется небольшое в основном окне Microsoft Office. Если кнопку Кроме того, можно что Вы всегда шкалы и наборыОК то в таких
- как работают его диск, чтобы при её листы и данные в одном минусы каждого способа fso = CreateObject(«scripting.filesystemobject»)Sub ExportHTML() ‘ на кнопку окошко, в котором утилиты. После этого вы этого не«Next» сказать, что сам
- храните веб-страницу и значков не поддерживаются. случаях создаются главные параметры, чтобы необходимости можно было вкладки для навигации
- файле, все вспомогательные и выполним вместе Set ts = макрос для экспорта«Нет» сообщается об этом, кликаем по левому
сделаете, то при. процесс интуитивно понятен. вспомогательную папку в обоими форматами веб-страниц.Однако, могут возникнуть обстоятельства,абсолютные не совершить наиболее внести правки перед между листами. файлы будут встроены с Вами такое fso.CreateTextFile(Filename, True, True) выделенного диапазона ячеек
5 вещей, о которых нужно помнить, преобразуя файлы Excel в HTML
. а также автоматически нижнему полю, чтобы попытке открыть AbexВ следующем окне указывается, Тем не менее, одном месте.Повёрнутый или ве когда Вы нессылки. Абсолютные ссылки типичных ошибок и публикацией страницы вItems on … в веб-страницу. преобразование поэтапно.
1. Вспомогательные файлы и гиперссылки
ts.Write txt: ts.Close в HTML OnПосле этого открывается окно запустится выбрать один из HTML to Excel каковым будет название в сложных случаяхУрок подготовлен для Васртикальный текст захотите автоматически публиковать содержат полный путь
избежать самых распространённых интернете или в(Элементы из …)Если перед тем, какЭтим способом Вы можете Set ts = Error Resume Next сохранения файла. ПереходимПроводник Windows трех форматов Excel, Converter откроется окошко, программы, отображаемое в можно воспользоваться для командой сайта office-guru.ruне поддерживается при лист Excel или к файлу или сообщений об ошибке. локальной сети. – опубликован будет нажать
сохранить всю рабочую Nothing: Set fso Selection.Areas(1).Select ‘ на в директорию, гдев той директории, в которые можно в котором будет стартовом меню. Тут конвертации сторонними утилитами.Источник: https://www.ablebits.com/office-addins-blog/2014/03/21/convert-excel-html/ экспорте данных из его элементы, например, к веб-странице, который В этом разделеКроме этого, Вы можете весь лист илиSave as книгу или любую = Nothing End
случай выделения несвязанных желаем его разместить. где расположены конвертированные преобразовать файл: сообщаться, о необходимости тоже можно просто Давайте рассмотрим различныеПеревел: Антон Андронов Excel в формат если файл содержит может быть доступен Вы найдёте краткий экспортировать файл в конкретные его элементы,(Сохранить как) Вы
2. Внесение изменений и пересохранение веб-страницы
её часть (например, Sub Private Sub диапазонов iFirstLine = Затем при желании файлы в форматеXLS (по умолчанию); выполнить данную процедуру. нажать на кнопку варианты преобразования HTMLАвтор: Антон Андронов веб-страницы. Любой повёрнутый конфиденциальную информацию или откуда угодно, например: обзор тех параметров, уже существующую веб-страницу, т.е.сводные таблицы, диаграммы, выделили диапазон ячеек, выделенный диапазон ячеек,
Worksheet_SelectionChange(ByVal Target As Selection.Row iFirstCol = изменяем наименование документа Excel. Теперь сXLSX; Чтобы перейти к «Next». в Excel.Потребность преобразовать таблицу с или вертикальный текст
3. Автопереиздание веб-страницы
был изменён тем, www.ваш-домен/раздел/страница.htm. которым нужно уделять при условии, что фильтрованные диапазоны и таблицу или диаграмму, график и т.д.) Range) End SubПрошу Selection.Column iLastLine = в поле ними можно проводитьXLSM (с поддержкой макросов). работе с утилитой,В следующем окне предлагаетсяСразу давайте остановимся на расширением HTML в в Вашей рабочей кто не является
В теории, Вы можете особое внимание при у Вас есть прочее. Сначала Вы то включите опцию в виде статичной знатоков помочь подредактировать iFirstLine + Selection.Rows.Count«Имя файла» любые дальнейшие манипуляции.Делаем выбор. нужно нажать в путем выставления галочек использовании сторонних программ форматы Excel может книге будет преобразован
доверенным лицом. В сохранить книгу Excel преобразовании файлов Excel права на ее выбираетеSelection веб-страницы (.htm или код. — 1 iLastCol, хотя его можноНо нужно учесть, чтоПосле этого переходим к этом окне на
установить иконку утилиты для перевода файлов наступить в различных в горизонтальный текст. таком случае Вы как веб-страницу, затем в HTML. редактирование. В такомItems on …(Выделенное) и нажмите .html), так чтоНеобходим перенос из = iFirstCol + оставить и текущим. если вы используете блоку настроек кнопку
на рабочий стол из формата HTML случаях. Возможно, нужноПреобразовывая рабочую книгу Excel можете временно или открыть получившуюся веб-страницуКак известно, веб-страницы часто случае, нажав кнопку(Элементы из …),Save любой сможет посмотреть файла Excel данных Selection.Columns.Count — 1 Далее кликаем по бесплатную пробную версию«Output setting»«Yes» (по умолчанию включено) в Эксель. Преимущества конвертировать данные веб-страницы
4. Возможности Excel, которые не поддерживаются на веб-страницах
в веб-страницу, Вы навсегда отключить автопереиздание. в Excel, внести содержат рисунки иPublish а затем либо
- (Сохранить). Почти готово! эти данные в таблицы, но с ‘HTML классы для полю утилиты, то будет(. Если при этом и на панель данного варианта заключаются из интернета или можете столкнуться соЧтобы временно отключить автопереиздание, изменения и пересохранить прочие вспомогательные файлы,
- (Опубликовать), Вы получитеAll contentsЕсли Вы заранее ничего интернете. присвоением определённых классов таблицы и четного«Тип файла» выполнена конвертация только«Настройка вывода» офисные документы открыты,
5. Самые распространённые трудности, встречающиеся при преобразовании файлов Excel в HTML
быстрого запуска. Выставляем в том, что файлы HTML, использовавшиеся следующими известными трудностями:
- выберите первый из файл. Однако, в а также гиперссылки сообщение с предложением(Всё содержимое), либо не выделяли, выполнитеПредположим, Вы создали многофункциональный html-тегов для определенных ряда данных sTableClassи выбираем один части документа.
- ). Тут следует указать, то работа в данные настройки согласно специализированные утилиты способны локально для другихСодержимое ячейки обрезано предложенных вариантов в этом случае некоторые на другие веб-сайты. записать данные вместо нужные элементы. следующие действия: отчёт в Excel столбцов в файле = «tb1» aLignClass из типов файловТакже конвертировать файл HTML где именно будут них принудительно будет своим предпочтениям и справляться с конвертированием нужд специальными программами.или отображается не
- вышеупомянутом сообщении – возможности Excel будут Преобразуя файл Excel существующего содержимого веб-страницыRanges of cellsЧтобы сохранить всю книгу, и теперь хотите Excel. = «center» vaLignClass Excel:
- в любой формат сохраняться преобразованные объекты. завершена, а все жмем на кнопку даже очень сложных Довольно часто производят полностью. Чтобы избежатьDisable the AutoRepublish feature не доступны. Например, в веб-страницу, приложение или поместить в(Диапазон ячеек) – включая все листы,
экспортировать всю этуНапример для столбца
= «middle» sOutput
XLSX;
Excel можно довольно
office-guru.ru
Конвертирование HTML в форматы Microsoft Excel
Если выставить переключатель несохраненные данные потеряны.«Next» объектов. Недостаток заключается, конвертацию транзитом. То потери части текста, while this workbook любые диаграммы, содержащиеся автоматически собирает для конце веб-страницы. Если выберите этот вариант диаграммы и вкладки информацию вместе с «A» - = «XLS; легко и при в позициюЗатем будет запущено окно. в том, что есть, сначала переводят Вам нужно либо is open в Вашей рабочей Вас связанные файлы первое – нажмите в выпадающем списке, для перемещения по диаграммой и сводной
, для столбца «B»» ‘width=500px align=center>»
XLSB; помощи стандартных инструментов
Процедура преобразования из формата HTML в Эксель
«Save target file(s) in регистрации. Если выПосле этого запускается окно, подавляющее большинство из таблицу из HTML отключить перенос текста,(Отключить функцию Автопереиздание, книге, превратятся в и гиперссылки иReplace а затем кликните
листам, выберите вариант таблицей на сайт - ‘ Начинаем таблицуXLSM. данного приложения. source folder» приобрели регистрационный ключ, где обобщена вся них платное. Кроме в XLS или либо сократить текст, когда открыта эта самостоятельные рисунки, и сохраняет их в(Заменить), если второе иконку выбора диапазона,Entire Workbook компании, чтобы коллегии т.д. sOutput = sOutputКогда все вышеуказанные настройкиЗапускаем Эксель и переходим, то таблица будет то в соответствующих информация о всех
Способ 1: использование сторонних программ
того, на данный XLSX, потом выполняют либо сделать столбец книга). Таким образом Вы не сможете вспомогательную папку. – чтобы указать, какие(Всю книгу). могли видеть ихФайл с примером & «» & произведены, жмем на во вкладку сохраняться в той полях требуется ввести тех настройках установки момент практически все её обработку или шире. Выравнивание текста будет отключена автоматическая изменять их вКогда Вы сохраняете вспомогательныеAdd to file ячейки Вы планируете
- Чтобы сохранить только текущий в режиме онлайн прилагаю. Cells(iFirstLine, iFirstCol).Text & кнопку«Файл» же директории, где его номер и программы, которые пользователь достойные варианты англоязычные редактирование, а потом в ячейке настройте публикация для текущей Excel, как это
- файлы, такие как(Добавить к файлу). опубликовать. лист, выберите вариант через веб-браузеры, неrom777 «» For k«Сохранить». расположен исходник в ваше имя (можно
- внес ранее. Если без русификации. Давайте снова преобразуют в по левому краю. сессии Excel, но делали ранее. диаграммы и фоновыеПоставьте галочкуPreviously published itemsSelection: Sheet запуская Excel.: Не поняла, где = iFirstLine To
- .В открывшемся окне клацаем формате HTML. Если псевдоним), а после пользователя что-то не рассмотрим алгоритм работы файл с прежним
- Элементы, которые добавляются в в следующий раз,Поэтому, лучшим способом будет текстуры, на тотAutoRepublish every time this(Опубликованные ранее элементы).(Выделенное: Лист). НаЧтобы преобразовать данные Excel вы присваиваете значение iLastLine ‘ ОбрабатываемПосле этого файл будет по наименованию
- же вы желаете этого нажать на удовлетворяет, то он в одной из расширением для выполнения существующую веб-страницу, всегда когда Вы откроете сначала обновить исходную же веб-сервер, Excel workbook is saved Этот вариант позволяет следующем шаге Вам в HTML, выполните ТХТ Excel таблицу If сохранен с выбранным«Открыть» сохранять файлы в кнопку может нажать на
- самых удобных программ
- его первоначальной функции.появляются в самом конце книгу, она будет книгу Excel, внеся все ссылки создаёт(Автопереиздание при каждом повторно опубликовать лист будет предложено выбрать: следующие шаги. ЭтиAlex77755 (k 2 расширением.. отдельной папке, то«Register» кнопку для выполнения вышеуказанного Это связано с
- страницы включена снова. определенные изменения, затемотносительными сохранении книги), если или элементы, которые опубликовать целый лист инструкции подходят для: если <> k /Также существует другая возможностьВслед за этим запускается для этого следует. Если вы пока«Back» направления конвертации — тем, что с, в то времяЧтобы отключить автопереиздание навсегда сохранить её как. Относительная ссылка (URL) хотите, чтобы рабочая Вы ранее уже или только некоторые Excel 2013, 2010txt=soutput 2) Then ‘проверяем перейти в окно окно открытия файла. переставить переключатель в ключ не приобрели
- и произвести соответствующее Abex HTML to таблицами намного проще как Вы хотите для всех выбранных рабочую книгу Excel указывает на файл книга или выбранные публиковали. Если Вы его элементы. и 2007., то на четность sLine сохранения документа. Нужно перейти в позицию и хотите испытать редактирование настроек. Если Excel Converter. работать именно в
- поместить их в элементов, откройте книгу (.xlsx), и только внутри того же элементы автоматически публиковались хотите удалить одинВы можете дать названиеВ рабочей книге Excelrom777 = «» ‘Если
- Перемещаемся во вкладку ту директорию, где«Customize» урезанную версию приложения, же он соПосле того, как был Excel. Давайте узнаем, верхней части страницы Excel, перейдите в после этого снова веб-сайта; она указывает после каждого сохранения из элементов списка, веб-странице, нажав кнопку откройте вкладку: Я не специалист пусто, прописываем If«Файл» расположен файл в
- . При этом по то в этом всем согласен, то скачан инсталлятор программы как можно перевести или по середине. диалоговое окно преобразовать её в имя файла или
- книги. Далее в
- просто выделите его
- Change Title
File
- в этом деле). oCurrentCell.Text <> «». формате HTML, который умолчанию объекты будут случае просто нажмите для начала установки Abex HTML to таблицу из формата Это нормальное явлениеPublish As Web Page веб-страницу. корневую папку вместо этой статье я и нажмите(Изменить) в правой(Файл) и нажмите Скрипт работает по Then sValue =Перейдя в новое окно, следует преобразовать. При сохраняться в папке на кнопку следует нажать на Excel Converter, запускаем HTML в Эксель. при сохранении файла(Публикация веб-страницы) иЕсли Вы поставили галочку полного имени сайта объясню работу этойRemove части диалогового окна.
Save As выделенным ячейкам в oCurrentCell.Text Else sValue щелкаем по пункту этом в поле«Output»
- «Remind me later» кнопку его, выполнив поСкачать последнюю версию Excel в уже нажмите кнопку напротив параметра (например, href=»/images/001.png»). Когда функции более подробно.(Удалить).
- У Вас также(Сохранить как).Если необходимо документе и копирует = » « левого вертикального меню форматов файлов данного, которая в свою.
- «Install» нему двойной щелчок Excel существующую веб-страницу. ЧтобыPublishAutoRepublish Вы удаляете любойПоставьте галочкуTitle будет возможность установить экспортировать только часть их в буфер ‘Если жирный ‘If«Сохранить как»
окна должен быть очередь размещена вПосле выполнения вышеуказанных действий. левой кнопкой мыши.Читайте также: Как перевести
Способ 2: преобразование с помощью стандартных инструментов Excel
переместить данные в(Опубликовать). В разделе(Автопереиздание) в диалоговом элемент, сохранённый какOpen published Web page(Заголовок). Чтобы добавить
- или изменить заголовок данных (например, диапазон обмена. Потом добавляю oCurrentCell.Font.Bold = True
- . установлен один из корневом каталоге диска запускается непосредственно окно
- Происходит процедура установки утилиты. Открывается приветственное окно HTML в Word другое место наItems to publish окне относительная ссылка, Microsoft in browser заголовок веб-страницы, который чуть позже, это ячеек, сводную таблицу в файл html.
- Then sValue =
- После этого запускается окно
- следующих параметров:
C программы Abex HTMLПосле её завершения запускается установщика. Щелкаем поФормат HTML является языком странице, Вы должны(Публикуемые элементы) вPublish As Web Page
- Excel автоматически удаляет(Открыть страницу в будет отображаться в описано далее на или диаграмму), тоsLine = sLine « сохранения документа, иВсе файлы Excel;. to Excel Converter. окно, в котором
- кнопке гипертекстовой разметки. Объекты отредактировать получившуюся веб-страницу списке(Публикация веб-страницы), который связанный файл из браузере), если хотите заголовке браузера, нажмите
- шаге 6. предварительно выделите эту & «после этой» & sValue & все дальнейшие действияВсе файлы;Если вы желаете сами Для добавления файла сообщается об этом.«Next» с данным расширением в любом HTML-редакторе,Choose мы упоминали ранее вспомогательной папки. посмотреть веб-страницу сразу
- кнопку
- Нажмите кнопку
- часть.
- строчки добавь проверку
« проводятся точно такВсе веб-страницы. указать место сохранения в формате HTML
- Если пользователь хочет( чаще всего применяются
либо изменить расположение(Выбрать) выберите элемент, в этой статье,
- Итак, главное правило – после сохранения.Change
- PublishВ диалоговом окне значения j» ‘Если курсив ‘If же, как было
- Только в этом случае объекта, то следует для конвертации следует тут же запустить«Далее» в интернете, как элементов в книге
который Вы не тогда Ваша веб-страницавсегда сохраняйте веб-страницу иНажмите кнопку(Изменить) справа от(Опубликовать) – откроетсяSavтипа такого: oCurrentCell.Font.Italic = True описано в предыдущем нужный нам файл кликнуть по кнопке, нажать на кнопку программу автоматически, то
).
lumpics.ru
Экспорт таблицы из Excel в HTML
статические веб-страницы. Но Excel и преобразовать
хотите опубликовывать и будет автоматически обновляться вспомогательные файлы вPublish пункта
диалоговое окноe Asselect case j Then sValue = варианте. отобразится в окне. расположенной справа от«Add Files» он должен проследить,Вслед за этим открывается нередко они могут ее заново в нажмите кнопку каждый раз, при одном месте(Опубликовать). Все готово!НаTitlePublish as Web Page(Сохранить как) выберите case 1 sLine «
Как видим, преобразовать файл Затем его нужно поля с адресом.. чтобы около параметра окно с лицензионным использоваться и для веб-страницу.Remove сохранении рабочей книги., иначе веб-страница не рисунке ниже наша(Заголовок) и введите(Публикация веб-страницы). Далее один из вариантов: = sLine &» & sValue & из HTML в выделить и нажатьПосле этого открывается окошкоПосле этого открывается окно«Launch Abex HTML to соглашением. Для того, локальных нужд, например,Ссылки на веб-странице не(Удалить). Эта функция очень будет отображаться правильно. таблица Excel выглядит нужный заголовок. мы кратко пояснимWeb » class=’td1′» case « один из форматов на кнопку с обзором папок. добавления файла. В Excel Converter»
чтобы согласится с как документы справки работаютК сожалению, некоторые очень полезна и позволяет Если Вы перемещаете вполне аккуратно, хотяНажмите кнопку все параметры отPage 2 sLine =» sLine = sLine Excel довольно просто,«Открыть» Вам необходимо переместиться нем нужно перейтибыла установлена галочка. ним, следует поставить к различным программам.. Наиболее очевидная причина полезные и популярные всегда поддерживать актуальной или копируете Вашу
дизайн немного искажён.Browse начала и до(Веб-страница) – так sLine & « & sValue & применив стандартные инструменты
. в ту директорию,
в категорию, где В обратном случае | переключатель в позицию Если возникает вопрос конвертации – Вы переместили возможности Excel становятся онлайн-копию Вашей таблицы веб-страницу в другоеЗамечание: (Обзор) справа от конца. Вы сохраните рабочую class=’td2′» end selectСпасибо. «» If k данной программы. НоПосле этого таблица в которую хотите назначить находятся объекты, предназначенные нужно снять её.«I accept the agreement» данных из HTML веб-страницу или вспомогательную недоступными, когда Вы Excel. место, убедитесь, чтоКод HTML, созданный CyberForum.ru |
Для выхода из
- Download demo project — 15.5 Kb
Introduction
This macro is designed to take the highlighted cells of an Excel spreadsheet and create a simple HTML table to display the output.
Background
I wrote this out of necessity for my job because I was unable to find code that did what I needed. What differentiates my approach from the other Excel to HTML converters I have seen is that many others take the approach of making the generated web page look as much like the spreadsheet as possible. I wanted this to make it easy to create a web page that looked like it belonged on my website not in MS Office.
For me, this means that it is flexible enough to be able to insert my stylesheet information and other properties and not have any of the garbage HTML that Microsoft likes to put in their pages. Also, I only cared about the output of the cell, not any underlying formula that generated the text. In other words, I wanted simple clean static HTML.
Using the code
There are a couple of ways to install the code. The simplest is to copy it to the C:Documents and Settings<USER>Application DataMicrosoftExcelXLSTART directory. This will make the macro available by opening the file anytime Excel opens, by clicking on Tools > Macro > macros, and selecting the exportHTML macro. A much nicer way is to convert it to an add-in and then assign the macro to a custom button. Go to the Microsoft website to see how to do this for your version of Office.
The basic idea is that the macro writes a string of HTML based on the selection of cells. Any user input by way of the form is incorporated into the HTML. Any style information inserted into the rows or columns will be inserted into every row or column generated by the script. Also, the default behavior is to copy the HTML to the clipboard. You have the ability to write the HTML to a file by going to the Options tab and selecting the file. This will overwrite the file.
Here is the code. It makes more sense when you are looking at the form and its properties.
Private Sub cellWidth_Change() If cellWidth.Value = True Then table100pct.Value = False End Sub Private Sub findFile_Click() Dim fDialog As Office.FileDialog Dim varFile As Variant Set fDialog = Application.FileDialog(msoFileDialogFilePicker) With fDialog .AllowMultiSelect = False .Title = "Please select a file" .Filters.Clear .Filters.Add "All Files", "*.*" .Filters.Add "ASP files", "*.asp" .Filters.Add ".Net files", "*.aspx" .Filters.Add "Html files", "*.htm, *.html" If .Show = True Then For Each varFile In .SelectedItems filePath.Text = varFile Next End If End With End Sub Private Sub makeHTML_Click() Dim DestFile As String Dim htmlOut As String Dim FileNum As Integer Dim ColumnCount As Integer Dim RowCount As Integer Dim vbTableWith As String Dim vbTableFStyle As String Dim vbCellWith As String Dim vbCellBGColor As String Dim vbCellFStyle As String Dim vbFontColor As String Dim vbBold As String Dim vbItalic As String Dim outputObj As New DataObject If Trim(tableStyle.Text) <> "" Then vbTableStyle = " style='" & tableStyle.Text & "' " Else vbTableStyle = "" If Trim(tableClass.Text) <> "" Then vbTableClass = " class='" & tableClass.Text & "' " Else vbTableClass = "" If Trim(tableId.Text) <> "" Then vbTableId = " id='" & tableId.Text & "' " Else vbTableId = "" If Trim(rowStyle.Text) <> "" Then vbRowStyle = " style='" & rowStyle.Text & "' " Else vbRowStyle = "" If Trim(rowClass.Text) <> "" Then vbRowClass = " class='" & rowClass.Text & "' " Else vbRowClass = "" If Trim(cellStyle.Text) <> "" Then vbCellStyle = " style='" & cellStyle.Text & "' " Else vbCellStyle = "" If Trim(cellClass.Text) <> "" Then vbCellClass = " class='" & cellClass.Text & "' " Else vbCellClass = "" If cellWidth = True Then vbTableWidth = " width:" & Selection.Columns.Width & "; " End If If table100pct = True Then vbTableWidth = " width:100%; " End If vbTableFStyle = " style='" & vbTableWidth & "' " htmlOut = "<table cellpadding=0 cellspacing=0 border=0 " & _ vbTableId & vbTableStyle & vbTableClass & _ vbTableFStyle & ">" & vbCrLf For RowCount = 1 To Selection.Rows.Count htmlOut = htmlOut & "<tr" & vbRowClass & vbRowStyle & ">" & vbCrLf For ColumnCount = 1 To Selection.Columns.Count If cellWidth = True Then vbCellWidth = " width:" & _ Selection.Cells(RowCount, ColumnCount).Width & "; " Else vbCellWith = "" End If If useFontColor = True Then vbFontColor = " color: " & _ index2Hex(Selection.Cells(RowCount, _ ColumnCount).Font.colorIndex) & "; " Else vbFontColor = "" End If If useBGColor = True Then vbCellBGColor = " background: " & _ index2Hex(Selection.Cells(RowCount, _ ColumnCount).Interior.colorIndex) & "; " Else vbCellBGColor = "" End If If useBold = True Then If Selection.Cells(RowCount, _ ColumnCount).Font.Bold = True Then vbBold = " font-weight: bold; " End If Else vbBold = "" End If If useItalic = True Then If Selection.Cells(RowCount, _ ColumnCount).Font.Italic = True Then vbItalic = " font-style: italic; " End If Else vbItalic = "" End If vbCellFStyle = " style='" & vbFontColor & vbCellWidth _ & vbCellBGColor & vbBold & vbItalic & "' " htmlOut = htmlOut & "<td" & vbCellClass & vbCellStyle _ & vbCellFStyle & ">" & Selection.Cells(RowCount, _ ColumnCount).Text & "</td>" If ColumnCount = Selection.Columns.Count Then htmlOut = htmlOut & vbCrLf End If Next ColumnCount htmlOut = htmlOut & "</tr>" & vbCrLf Next RowCount htmlOut = htmlOut & "</table>" & vbCrLf If emptyCell = True Then htmlOut = Replace(htmlOut, "></td>", "> </td>") If Trim(filePath.Text) <> "" Then DestFile = filePath.Text FileNum = FreeFile() On Error Resume Next Open DestFile For Output As #FileNum If Err <> 0 Then MsgBox Err.Description MsgBox "Cannot open filename " & DestFile End Else Print #FileNum, htmlOut; Close #FileNum End If End If On Error GoTo 0 If copyClipboard.Value = True Then outputObj.SetText (htmlOut) outputObj.PutInClipboard End If End End Sub Private Sub table100pct_Change() If table100pct.Value = True Then cellWidth.Value = False End Sub Private Function index2Hex(index) Dim hexColor As String Dim colorTable(56) As String colorTable(1) = "#000000" colorTable(2) = "#FFFFFF" colorTable(3) = "#FF0000" colorTable(4) = "#00FF00" colorTable(5) = "#0000FF" colorTable(6) = "#FFFF00" colorTable(7) = "#FF00FF" colorTable(8) = "#00FFFF" colorTable(9) = "#800000" colorTable(10) = "#008000" colorTable(11) = "#000080" colorTable(12) = "#808000" colorTable(13) = "#800080" colorTable(14) = "#008080" colorTable(15) = "#C0C0C0" colorTable(16) = "#808080" colorTable(17) = "#9999FF" colorTable(18) = "#993366" colorTable(19) = "#FFFFCC" colorTable(20) = "#CCFFFF" colorTable(21) = "#660066" colorTable(22) = "#FF8080" colorTable(23) = "#0066CC" colorTable(24) = "#CCCCFF" colorTable(25) = "#000080" colorTable(26) = "#FF00FF" colorTable(27) = "#FFFF00" colorTable(28) = "#00FFFF" colorTable(29) = "#800080" colorTable(30) = "#800000" colorTable(31) = "#008080" colorTable(32) = "#0000FF" colorTable(33) = "#00CCFF" colorTable(34) = "#CCFFFF" colorTable(35) = "#CCFFCC" colorTable(36) = "#FFFF99" colorTable(37) = "#99CCFF" colorTable(38) = "#FF99CC" colorTable(39) = "#CC99FF" colorTable(40) = "#FFCC99" colorTable(41) = "#3366FF" colorTable(42) = "#33CCCC" colorTable(43) = "#99CC00" colorTable(44) = "#FFCC00" colorTable(45) = "#FF9900" colorTable(46) = "#FF6600" colorTable(47) = "#666699" colorTable(48) = "#969696" colorTable(49) = "#003366" colorTable(50) = "#339966" colorTable(51) = "#003300" colorTable(52) = "#333300" colorTable(53) = "#993300" colorTable(54) = "#993366" colorTable(55) = "#333399" colorTable(56) = "#333333" If index = xlColorIndexNone Then index = 2 If index = xlColorIndexAutomatic Then index = 1 hexColor = colorTable(index) index2Hex = hexColor End Function
Points of interest
This was an amazingly simple piece of code that I had a lot of fun making. It has proved immensely valuable to me as a web developer. I haven’t tested it on older Office versions, but I think any changes would be simple to implement. I hope I have time to come back and make improvements to the code, but if you beat me to it, drop me a line and let me see what you have done with it. Some suggestions are to:
- Automate the script to run on all Excel files inside of a folder or all worksheets in a file.
- Be able to preview and change style information on individual cells or rows prior to writing the final HTML.
- Colspans and rowspans.
- Any DHTML behaivior you can think of.
- A simple change would be to optionally alternate the background color of rows in the table.
This member has not yet provided a Biography. Assume it’s interesting and varied, and probably something to do with programming.
АЛЕКСЕЙ МИЧУРИН
Конвертирование из Excel в HTML:
корректно, качественно, просто
Итак, наша задача состоит в том, чтобы корректно конвертировать документ из формата xls в формат HTML с учётом форматирования исходного документа и при этом обойтись «малой кровью»
Постановка задачи. Или в чем проблема?
Многие веб-мастера часто сталкиваются с задачей конвертирования файлов Microsoft Excel в другие форматы. Нередко это сопряжено с трудностями, так как формат xls, как все прекрасно знают, не документирован.
В некоторых случаях возможно сохранение данных Excel в документированных форматах и последующая их обработка. Но часто этот способ работает неудовлетворительно. Простые форматы, удобные для обработки, не способны сохранить всю информацию о форматировании документа, а реализация обработчика сложных форматов неоправданно трудоёмка.
За примером далеко ходить не надо. Множество фирм, которые имеют свои веб-страницы и периодически их обновляют, ведут свои дела с использованием Excel. Перед веб-мастером при каждом обновлении информации на сервере возникает задача конвертирования. Причём задача может осложняться следующими аспектами:
Во-первых, это изменение дизайна. Price-list, подготовленный в Excel, обычно рассчитан на распечатку на чёрно-белом принтере. Price-list на веб-сайте – нет. Хотя бы поэтому простое «Сохранить как веб-страницу» не подходит (я уж молчу о том, какого качества получается HTML-код при таком сохранении).
Во-вторых, при конвертировании необходимо учесть специфику Excel. Например, очень многие люди, редактирующие price-list, широко применяют команду «Формат/строка/скрыть». При этом высота строки становится нулевой, и строка как бы исчезает с экрана и на печати. Понятно, что и на веб-сайт такие строки попасть не должны. Однако они превосходно сохраняются в других форматах и ничем не отличаются от обычных, не скрытых, строк. Это приводит к тому, что доктрина «Сохранить как текст с разделителями и обработать» не даёт удовлетворительных результатов.
В-третьих, в price-list часто используется форматирование, сохранение которого критично. Например, наименования некоторых товаров могут быть зачёркнуты или выделены цветом в знак того, что эти товары были и обязательно будут, но сейчас их нет. Некоторые позиции могут быть выделены курсивом и так далее. Вся эта информация бесследно исчезает, если пересохранить price-list в простом формате, скажем, как текст с разделителями табуляции.
Итак, наша задача состоит в том, чтобы корректно конвертировать документ из формата xls в формат HTML с учётом форматирования исходного документа и при этом обойтись «малой кровью».
Я предлагаю разбить эту задачу на две. Первая – сохранение данных в простом формате, который тем не менее будет нести в себе всю необходимую нам информацию о разметке документа. Вторая – обработка этого формата и создание HTML-страницы.
Первую задачу (экспорт) я предлагаю решить средствами Excel. Тут у нас фактически нет выбора, формат xls может обработать только то единственное на свете приложение, которое его понимает. Это диалектика.
Вторую задачу я предлагаю решить средствами языка Perl. Почему? Потому, что этот язык ориентирован на работу со строками и на решение задач, подобных нашей (Perl – Practical Extraction and Report Language – то, что надо). Потому, что этот язык знает достаточно много программистов, связанных с веб-разработками (если вы не относитесь к их числу и планируете заниматься web, то искренне рекомендую обратить внимание на Perl). Потому, что этот язык бесплатен и доступен любому пользователю на любой платформе. И потому, что мой код на Perl можно будет потом легко модифицировать, заставив его, допустим, помещать каждый раздел price-list в отдельный файл, различным образом сортировать позиции прайса, отслеживать обновления и динамику цен, снабжать каждую позицию полями HTML-форм для on-line заказа в веб-магазине… В конце концов, мой скрипт легко превратить в CGI-приложение для администрирования веб-сервера.
Такое решение представляется мне максимально гибким, функциональным и компактным, потому что каждая часть задачи решается тем средством, которое наиболее приспособлено для её решения.
Давайте оттолкнёмся от конкретного примера. В качестве «подопытного кролика» предлагаю следующий прайс (см. рис. 1).
Рисунок 1. Пример прайса
Как видите, он сочетает в себе все неприятные элементы, упомянутые выше: и форматирование (фон, перечёркивания, жирный шрифт), и скрытые строки (если приглядеться, то можно заметить, что после девятой сразу идёт двенадцатая строка). Давайте им займёмся.
Экспорт данных из Excel
Приступим к решению первой задачи. Для экспорта данных из Excel я предлагаю несложный макрос на Visual Basic (номера строк приведены только для удобства комментирования):
1: Sub table2table()
2: ‘
3: ‘ макрос, сохраняющий выделенный фрагмент таблицы
4: ‘ в текстовом формате с отметками о форматировании
5: ‘
6: With ActiveWindow.RangeSelection
7: c1 = .Columns.Column
8: c2 = .Columns.Count — 1 + c1
9: r1 = .Rows.Row
10: r2 = .Rows.Count — 1 + r1
11: End With
12: If (r1 — r2 = 0 And c1 — c2 = 0) Then
13: MsgBox _
14: «что-то мало выделено (для сохранения) ,-)», _
15: vbCritical, «сообщение макроса»
16: End If
17: fileSaveName = Application.GetSaveAsFilename( _
18: InitialFileName:=»file», _
19: fileFilter:=»Text Files (*.txt), *.txt», _
20: Title:=»сохранение страницы в нашем формате»)
21: If fileSaveName = False Then
22: MsgBox _
23: «файл-то не выбран. никаких действий не предпринято.», _
24: vbCritical, «сообщение макроса»
25: Else
26: sep = Chr(9) ‘ разделитель
27: subsep = Chr(8) ‘ под-разделитель
28: Open fileSaveName For Output As #1
29: For r = r1 To r2
30: l = CStr(Rows(r).RowHeight)
31: For c = c1 To c2
32: With Cells(r, c)
33: l = l + sep + CStr(.Text) + _
34: subsep + CStr(.MergeCells) + _
35: subsep + CStr(.Font.Bold) + _
36: subsep + CStr(.Font.Strikethrough)
37: End With
38: Next
39: Print #1, l
40: Next
41: Close #1
42: End If
43: End Sub
Этот макрос сохраняет выделенную часть прайса в заданный файл. Макрос можно добавить к рабочей версии прайса и сделать для его вызова кнопку (вне области печати), а можно хранить в отдельном файле. Поместить его в документ очень просто: вызовите редактор Visual Basic (меню: «Сервис –> Макрос –> Редактор Visual Basic»; или <Alt-F11>), создайте новый модуль (меню: «Вставить –> Модуль») и введите приведённый здесь текст (без номеров строк). Теперь можно нарисовать кнопку (инструмент на панели «Формы») и назначить ей макрос.
Давайте вкратце рассмотрим, как работает этот код.
Первая строка – объявление макроса. Как видите, я назвал его незамысловато table2table, вы можете наречь его более звучно.
В строках с 6 по 11 мы определяем границы выделенной части документа (ведь мы будем сохранять только выделенную часть). Теперь c1 и c2 – номера первого и последнего столбца, а r1 и r2 – первой и последней строки выделенной области.
Далее, в строках с 12 по 16 проверяем, а была ли выделена область или нашему макросу предстоит работать только с одной ячейкой. Этого, конечно, можно и не делать, но ведь, скорее всего, запускать этот макрос будете не вы, а менеджеры, редактирующие прайс, на их аккуратность не всегда можно рассчитывать. Итак, если ничего не было выделено, то наш макрос выдаст предупреждение (см. рис. 2).
Рисунок 2. Предупреждение макроса
В строках с 17 по 20 мы вызываем диалог Application.GetSaveAsFilename, чтобы пользователь мог выбрать имя файла (см. рис. 3).
Рисунок 3. Диалог сохранения пользователем файла
Опять же вы можете просто задать фиксированное имя, но мне кажется, что это неудобно даже в том случае, если вы сами эксплуатируете этот макрос.
В строках с 21 по 42 следует конструкция if-then-else с проверкой, было ли указано имя файла для сохранения или пользователь нажал кнопку «Отмена» диалога «Сохранить как…».
Если пользователь отказался от сохранения, то выдаётся соответствующее сообщение (строки с 22 по 24), если имя файла указано, то начинается самое интересное – сохранение данных.
Но прежде чем обсудить процедуру сохранения (строки с 26 по 41), давайте скажем пару слов о том, в каком же именно формате мы намерены сохранять данные. Предлагаю самый простой для обработки формат: ASCII-текст. Каждая строка соответствует строке сохраняемой таблицы. Поля разделены одно символьными разделителями. Первое поле – высота строки (эта информация необходима, чтобы отфильтровать «скрытые» строки). Все последующие поля – содержимое ячеек, но каждое из этих полей содержит несколько подполей, разделённых своими разделителями. Подполя несут различную информацию о ячейке: содержание, параметры форматирования.
У нас разделители полей и подполей задаются ASCII-кодами в строках 26 и 27 соответственно. Вы можете выбрать более удобные разделители. Например, если вы уверены, что в ваших данных никогда не встречается символ «:», то можно взять его в качестве разделителя или подразделителя.
Далее (строка 28) открываем файл.
Организуем цикл по строкам (строка 29).
Для каждой строки вычисляем высоту. Заодно начинаем готовить строку для сохранения в файл в переменной l (строка 30 листинга).
В цикле (строка листинга 31) по ячейкам сохраняемой строки таблицы добавляем к строке l всю интересующую нас информацию о ячейках, снабжая её разделителями.
Какие свойства ячейки мы сохраняем?
Первым делом – текст ячейки. Обратите внимание, что мы используем именно свойство .Text, а не свойство .Value. Это не случайно. Свойство .Value возвращает истинное содержимое ячейки, свойство .Text возвращает тот текст, который отображается на мониторе и выводится на печать. Эти две величины могут не совпадать (и обычно не совпадают), потому что на экран значения выводятся согласно заданному формату ячейки (например, числа выводятся с заданным количеством знаков после запятой).
Свойство .MergeCells говорит о том, является ли ячейка частью группы объединённых ячеек.
Свойство .Font.Bold отражает жирность текста в ячейке.
Свойство .Font.Strikethrough говорит о том, был ли текст оформлен как зачёркнутый.
Для нашего примера нам, пожалуй, больше ничего не потребуется. Однако не могу не отметить ряд полезных свойств, которые могут вам пригодиться. Имена этих свойств достаточно красноречивы, и я не буду их комментировать, ограничусь перечислением:
- .Font.Name
- .Font.FontStyle
- .Font.Size
- .Font.Underline
- .Font.ColorIndex
- .Font.Italic
- .HorizontalAlignment
- .VerticalAlignment
- .ColorIndex
- .Pattern
Обратите внимание, все свойства явно приводятся к строчному типу функцией CStr (строки с 33 по 36). Это весьма полезная процедура, навсегда избавляющая вас от головной боли о преобразованиях типов.
Здесь следует сделать важную оговорку. Дело в том, что функция CStr не в состоянии обработать неопределённые значения. Если таковые будут встречаться в ваших документах, то вместо CStr вы можете использовать собственную функцию преобразования величин в текстовый формат. Например, safeCStr:
1: Function safeCStr(p As Variant) As String
2: If IsNull(p) Then safeCStr = «» Else safeCStr = CStr(p)
3: End Function
Должен отметить, что сам я никогда не сталкивался с такими ситуациями, но научно-технический консультант журнала без труда нашёл в Интернете прайс-лист, в некоторых ячейках которого свойство .Font.Bold было не определено. Я полагаю, что такие документы могут возникать в результате экспорта данных из других приложений. Например, продукты «1C» допускают экспорт данных в Excel. Одним словом, такая ситуация возможна. – Примечание автора.
Вот почти и всё. Осталось сохранить готовую строку l в файл (строка 39 листинга) и закрыть файл по завершении всего цикла по строкам (строка 41).
Итак, вы выделяете сохраняемую область (в нашем примере это первые три столбца таблицы, строки с 4 по 21), нажимаете созданную вами кнопку, выбираете имя файла, и файл сохранён. Что с ним делать дальше?
Создание HTML-страницы по экспортированным данным
С этим файлом можно сделать всё что угодно, потому что его формат нам полностью известен (приятно это осознавать). Я приведу пример генерации HTML-страницы.
Как я и говорил, предлагаю скрипт на Perl:
1: #!/usr/bin/perl -w
2:
3: #use strict;
4:
5: # my ($TRUE, $FALSE)=(‘Истина’, ‘Ложь’);
6: my ($TRUE, $FALSE)=(‘True’, ‘False’);
7:
8: sub qtnum {
9: my $t=shift;
10: $t=~s|,(d+)|,<small>$1</small>|;
11: return $t;
12: }
13:
14: sub qtstring {
15: my $t=shift;
16: $t=~s/&/&/g;
17: $t=~s/»/"/g;
18: $t=~s/>/>/g;
19: $t=~s/</</g;
20: return $t;
21: }
22:
23: print <<‘TEXT’;
24: <html>
25: <head>
26: <title>прайс некой фирмы</title>
27: <style type=»text/css»>
28: <!—
29: .al {background-color: #FFFFFF}
30: —>
31: </style>
32: </head>
33: <body bgcolor=»#E8E8E8″>
34: <table cellspacing=»0″ cellpadding=»1″ border=»0″>
35: <tr><td colspan=»3″ height=»1″ bgcolor=»#8F0000″ nowrap></td></tr>
36: <tr>
37: <th colspan=»3″ bgcolor=»#FFFFFF»><big>прайс некой фирмы</big></th>
38: </tr>
39: <tr><td colspan=»3″ height=»1″ bgcolor=»#8F0000″ nowrap></td></tr>
40: <tr>
41: <th rowspan=»3″>наименование товара</th>
42: <th colspan=»2″><small>цена</small></th>
43: </tr>
44: <tr><td colspan=»2″ height=»1″ bgcolor=»#8F0000″ nowrap></td></tr>
45: <tr>
46: <th><small>у.е.</small></th>
47: <th><small>руб.</small></th>
48: </tr>
49: <tr><td colspan=»3″ height=»1″ bgcolor=»#8F0000″ ></td></tr>
50: TEXT
51:
52: while (<>) {
53: s/[x0Ax0D]+$//;
54: my @f=split /x09/;
55: my $lh=shift @f;
56: my ($name, $usd, $rub)=map {[split /x08/]} @f;
57: if ($lh) {
58: if ($name->[1] eq $TRUE) { # обработка заголовка раздела
59: print ‘<tr><th colspan=»3″ bgcolor=»#FFFF00″>’ .
60: $name->[0] .
61: «</th>n»;
62: } else { # обработка обычной строки
63: print <<‘TEXT’ .
64: <tr
65: onMouseOver=»this.className=’al’;»
66: onMouseOut=»this.className = »;»><td>
67: TEXT
68: ($name->[3] eq $TRUE?'<font color=»#888888″><strike>’:») .
69: qtstring($name->[0]) .
70: ($name->[3] eq $TRUE?'</strike></font>’:») .
71: qq|</td>n<td align=»right»>| .
72: ($usd->[2] eq
$TRUE?'<font color=»#880000″><b>’:») .
73: qtnum($usd->[0]) .
74: ($usd->[2] eq $TRUE?'</b></font>’:») .
75: qq|</td>n<td align=»right»>| .
76: ($rub->[2] eq
$TRUE?'<font color=»#880000″><b>’:») .
77: qtnum($rub->[0]) .
78: ($rub->[2] eq $TRUE?'</b></font>’:») .
79: «</td>n»;
80: }
81: print <<‘TEXT’;
82: </tr>
83: <tr><td colspan=»3″ height=»1″ bgcolor=»#8F0000″ nowrap></td></tr>
84: TEXT
85: } else {
86: warn ‘hidden line: ‘.$name->[0].»n»;
87: }
88: }
89:
90: print <<‘TEXT’;
91: </table>
92: </body>
93: </html>
94: TEXT
Скрипт принимает входные данные из файла, указанного как параметр командной строки, или со стандартного ввода и выдаёт HTML-код на стандартный выход. То есть запускать его можно так:
perl file2html.pl file.txt >file.html
или, например, так:
cat file.txt | perl file2html.pl >file.html
Разберёмся, как работает этот скрипт (я буду предполагать, что читатель немного знаком с Perl).
Первая строка – стандартная магическая строка любого UNIX-сценария. Пользователи Windows могут её проигнорировать. В третьей строке – закомментированная инструкция use strict. Она будет полезна вам только при отладке.
В строках 5 и 6 мы определим переменные $TRUE и $FALSE, которые будут содержать значения истины и лжи, выдаваемые Excel. Дело в том, что русский Excel использует русские слова, европейский – английские. Откомментируйте подходящую вам строку и закомментируйте лишнюю.
Процедура qtnum (с 8 по 12 строки) добавляет к записи числа теги, превращая «3,14» в «3,<small>14</small>». То есть центы и копейки будут отображаться меньшим шрифтом. Это чисто косметическая мера.
Процедура qtstring (строки с 13 по 21) квотирует «небезопасные» символы: & (and), “ (двойная кавычка), < (больше), > (меньше). Это, как вы понимаете, обязательная мера.
В строках с 23 по 50 печатается «шапка» HTML-документа.
В цикле while (строки с 52 по 88) мы считываем построчно входной файл, преобразуем его в HTML-документ и выдаём в стандартный поток вывода stdout.
В строке 53 от очередной считанной строки отрезается символ(ы) конца строки. Я не использую стандартные функции Perl chop и chomp, потому что обрабатываемый файл создаётся под Windows, а обработчик (наш сценарий на Perl) может работать и под UNIX. Файл же может передаваться весьма экзотическими путями. Например, наверняка многие захотят чуть доработать мой код и превратить его в CGI-приложение для администрирования их родного сервера. Поэтому я не полагаюсь на стандартные функции, а прописываю явно, что мне необходимо удалить все символы x0A и x0D в конце строки.
Далее строка разделяется на поля (строка 54). Здесь используется тот же разделитель, что и в макросе на Visual Basic (строка макроса 26).
Первое поле – высота строки – сохраняется в переменной $lh (строка 55). Все остальные поля разделяются на под-поля. В результате переменным $name, $usd, $rub присваиваются указатели на массивы, содержащие всю необходимую информацию о содержимом и форматировании соответствующей ячейки. $name – ячейка с наименованием товара, $usd – ячейка с ценой в долларах, $rub – ячейка с ценой в рублях. Делается это одной-единственной строкой 56.
Если высота строки не равна нулю, то выполняем блок с 58 по 84 строки. В противном случае выдаём предупреждение в стандартный поток ошибок stderr о том, что обнаружена и проигнорирована скрытая строка (строка 86).
Обработка строк таблицы только на первый взгляд может показаться сложной.
Прежде всего мы выясняем, с чем мы имеем дело: в строке 58 проверяем истинность свойства .MergeCells ячейки с наименованием товара. Если эта ячейка объединена, то это заголовок раздела, тогда выполняется код генерирующий заголовок (строки с 59 по 61).
Если оказывается, что мы имеем дело с обычной строкой, то выполняется блок else (строки с 63 по 79). Здесь формируется строка HTML-таблицы, в которую вставляются дополнительные элементы форматирования (для тех строк таблицы, где это необходимо).
Обратите внимание, что мы встроили в наш документ элементарный DHTML-приём. В таблице всегда подсвечивается строка, на которой находится указатель мыши. Это упрощает чтение таблицы. Согласитесь, что добиться такого эффекта средствами Excel (путём сохранения документа как веб-страницы) затруднительно.
В строках 90–94 выводим завершающие теги документа. Обратите внимание, что в конце файла с программой обязательно должна быть пустая строка. Иначе последнее слово («TEXT») (строка 94) не будет правильно обработано интерпретатором Perl.
То что получается на выходе, смотрите на рисунке (стр. 82).
Согласитесь, было за что биться!
BUGS. Что ещё можно добавить?
Я не сомневаюсь, что хотя мои примеры полностью работоспособны, мало кто будет использовать их без малейших модификаций. Хочу подбросить пару мыслей о том, что можно улучшить в этих скриптах, чтобы при их модификации вы не делали лишней работы, а убивали сразу как можно больше зайцев.
По сценарию на Visual Basic
Здесь вам скорее всего придётся изменить набор сохраняемых параметров ячейки. Список наиболее полезных я привожу в обсуждении этого сценария. Если вам понадобится какая-нибудь экзотика, обращайтесь к документации Microsoft, свойства объекта Range.
Наверное, многие сочтут недоработкой то, что макрос безусловно заменяет существующие файлы (если вы укажите для сохранения существующий файл). Это, как вы понимаете, легко исправить.
Рисунок 4. Конечный прайс
Наверное, для реальных документов будет несложно сформулировать условия, по которым макрос будет сам определять область прайса (или другого документа), подлежащую сохранению. Тогда этот процесс можно автоматизировать. Моё решение (сохранение выделенной области) скорее универсально, чем удобно.
Наконец, читатель может справедливо спросить, зачем макрос для Excel сохраняет скрытые строки, ведь их можно отсеять уже на стадии экспорта? Снимаю шляпу перед внимательностью читателя (втайне надеясь на ответный жест в адрес моей проницательности). Сохранять скрытые строки действительно совсем не обязательно, просто я привык сохранять всё. Причины? Возможно, скрытые строки всё-таки понадобятся. Или вы захотите точно знать, какие строки были проигнорированы (мой Perl-сценарий, как вы помните, сообщает о каждой скрытой строке). Кроме того, информация о высоте строк может быть критерием для идентификации заголовков… Хотя, конечно, вы можете слегка модифицировать VB-код и не сохранять скрытые строки.
По скрипту на Perl
Конечно, весь HTML-код (а это большая часть скрипта) вы скорее всего значительно измените. Конечно, вам придётся изменить количество столбцов, шапку, многие удалят из HTML-кода мои пустые строчки-разделители, накрутят вложенных таблиц, изменят DHTML-функции, добавят CSS-таблицы… Но это не самое главное и не принципиальное изменение.
Скорее всего вам придётся «научить» этот сценарий разбивать большие документы на разделы и сохранять эти разделы в разных файлах, потому что прайс-лист весьма средней фирмы в формате HTML может потянуть на сотни килобайт. Не всякий веб-странник дождётся конца загрузки такого документа. Возможно, вы захотите добавить сортировку (если позиции в печатном прайс-листе и в веб-прайсе должны следовать в разном порядке).
Несомненно, будет полезна функция сравнения текущего прайса с предыдущим, которая будет добавлять информацию об обновлениях и динамике цен.
Я бы советовал организовать подобные процедуры (не относящиеся непосредственно к HTML-вёрстке) в виде отдельных программ или модулей. Кстати, часть работы по HTML-вёрстке можно доверить механизму SSI, а скрипт пусть собирает SHTML-документ. Набор простых инструментов всегда удобнее, гибче и управляемее, чем один универсальный. Держитесь подальше от грабель, по которым гуляют создатели телефона-микроволновки и телевизора-зубной щётки.
Список советов и предложений можно продолжать бесконечно, но я думаю, что уже разбудил вашу фантазию, и дальше вы справитесь и без меня. Адаптация приведённого здесь примера к вашим конкретным условиям, возможно, потребует несколько часов работы. Зато потом вы будете щедро вознаграждены, ведь все последующие обновления информации на вашем веб-сервере вы будете делать буквально в несколько касаний клавиатуры и мыши!
Мой мир
Вконтакте
Одноклассники
Google+