Polytech-soft.com

ПК журнал
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Html в ячейке excel

Экспорт выделенного диапазона ячеек в HTML код

Макрос предназначен для экспорта выделенного диапазона ячеек книги Excel в код HTML.

Результат (HTML код таблицы) помещается в буфер обмена.

Первая строка выделенного диапазона ячеек считается заголовком таблицы (обрамляется тегами вместо )

Например, мы имеем изначально такую таблицу Excel, где мы выделили диапазон ячеек A1:D9

Запускаем макрос — и в буфере обмена Windows появляется следующий HTML-код:

После вставки этого кода на веб-страницу, видим следующее:

ФИОПравильный результат склоненияНовая формула — DativeCaseСовпадение
БАРАШ Лев ЮрьевичБАРАШУ Льву ЮрьевичуБарашу Льву ЮрьевичуИСТИНА
Абраамян Оганес ДерениковичАбраамяну Оганесу ДерениковичуАбраамяну Оганесу ДерениковичуИСТИНА
Абрамян Артур АлександровичАбрамяну Артуру АлександровичуАбрамяну Артуру АлександровичуИСТИНА
Абрамян Назар ВачагановичАбрамяну Назару ВачагановичуАбрамяну Назару ВачагановичуИСТИНА
Абросимов Антон ВладимировичАбросимову Антону ВладимировичуАбросимову Антону ВладимировичуИСТИНА
АГАФОНОВ Иван НиколаевичАГАФОНОВУ Ивану НиколаевичуАгафонову Ивану НиколаевичуИСТИНА
Агафонов Константин ВикторовичАгафонову Константину ВикторовичуАгафонову Константину ВикторовичуИСТИНА
Агеев Антон СергеевичАгееву Антону СергеевичуАгееву Антону СергеевичуИСТИНА

Собственно, сам код макроса для экспорта таблицы Excel в HTML:

PS: За основу взят код из блога Максима Тарлюн

  • 20376 просмотров

Комментарии

Вопрос, а как вызвать диалоговое окно сохранения как Веб-страница(.html) с отметкой сохранить выделенный лист?

Как-то так можно:

В созданном макросе замены никак не могу добавить несколько замен, как это можно реализовать?
Заранее спасибо за ответ
Sub place()
Dim wfile: wfile = «C:. rs.HTM»
Application.DisplayAlerts = False
SaveTXTfile wfile, Replace(ReadTXTfile(wfile), «?», «a»)
Application.DisplayAlerts = True
End Sub

Не знаю, зачем тут формулы. Для макросов, размер файла не важен, — пользуйтесь макросами для обработки, и ограничений не будет.

Формулы работы с тексом обрабатывают файлы до 32 кб, а эксель катастрофически раздувает HTML файлы при сохранении. Возможно ли как то обойти это органичение?

Работаете с файлом HTML также, как с любым другим текстовым файлом
http://excelvba.ru/code/txt

А как макросом внести изменения в HTML? Если Макрос Excel, то как открыть файл HTML в тексовом виде?

Только если потом макросом вносить правки в файл HTML (каждый раз после сохранения)
Т.к. вмешаться в процесс сохранения файла (save as) не получится

Для оптимизации работы со ссылками на сайте использую фунцию onclick
Пример
Ссылка
При этом иногда ссылки находятся в таблице, которая сохраняется периодически макросом из Excel (save as . html) в самом ексель ячейки с гиперссылками (пример: HYPERLINK(H6,1), в ячейке Н6 прописано — #» onclick=»window.open(‘http://google.com’); window.open(‘http://google.com’);).

Одна из проблем конвертации, кроме всего прочего, это преобразование двойных кавычек » в » получается —
Ссылка

Как «чайнику» можно решить эту проблему не изменяя файл, сохраненный в html (очень часто обновляется).

Заранее благодарен за ответы.

Здравствуйте, Роман
Да, можно и сразу в файл
Замените код

Спасибо за макрос!
Есть вопрос можно ли сохранять выполнение не в буфер обмена а сразу в файл HTML?

очень интересует эта возможность

——- Можно и цвет передать, и гиперссылки корректно обработать.
Но это надо дорабатывать код.
Если готовы оплатить доработку, — сделаем. ——

нужны все атрибуты — границы,цвета ячеек и ссылки..
Как бы мне получить такой макрос?

А если надо с объединениями по столбцам и по строкам, тогда можно сделать так:

sOutput = «»
For j = iFirstCol To iLastCol
If Cells(k, j) <> «» Then
If Cells(k, j).MergeArea.Count > 1 Then
SpanedCell = «» & Cells(k, j) & «»
rSpan0 = » rowspan=» & Chr(34) & 1 & Chr(34)
SpanedCell = Replace(SpanedCell, rSpan0, «»)

cSpan0 = » colspan=» & Chr(34) & 1 & Chr(34)
SpanedCell = Replace(SpanedCell, cSpan0, «»)
ce = ce & SpanedCell
Else
ce = ce & «» & Cells(k, j) & «»
End If
Else
If Cells(k, j).MergeArea.Count = 1 Then ce = ce & » »
End If
Next j
If k = iFirstLine Then ce = Replace(ce, «td», «th»)
r = r & ce & «»
‘MsgBox r
Next k

sOutput = sOutput & r & «»
[K1] = sOutput

Можно и цвет передать, и гиперссылки корректно обработать.
Но это надо дорабатывать код.
Если готовы оплатить доработку, — сделаем.

удалось ли передать цвет ячейки в таблицу? и есть ли возможность содержание гиперссылки этим же макросом отправлять в таблицу?

Подскажите как в таблицу передать цвет заливки ячейки ?

Нет, не поменяется
Макрос выгружает в HTML ТЕКУЩИЕ ЗНАЧЕНИЯ из таблицы
Если надо отобразить обновляемую таблицу Excel на сайте, — есть другие решения (например, библиотеки на PHP для вывода таблиц Excel), а макросы тут вообще ни при чем.

Вопрос такой! Если я изменю значение в Excel, поменяется ли отображение на веб-страничке?

Увы, по Mac ничего подсказать не могу, — не на чем протестировать даже.

Самый простой способ — выводите результат на новый лист Excel

Спасибо за макрос, а подскажите плиз, под Эксель в MacOS какие нужно внести изменения, чтобы в буфер кидало результат?

Отправить комментарий

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

ПОПУЛЯРНЫЕ ПРОГРАММЫ

© 2009-2019 Игорь Вахненко

Html в ячейке excel

ситуация : копирую из HTML таблицы содержимое одной из ячеек. В ячейке текст 2.5
теперь открываю Excel выделяю сразу несколько ячеек , например 4х4, и выствляю там формат «ТЕКСТОВЫЙ».
делаю вставку содержимого буффера обмена в одну из этих ячеек.
вставляется 2.май
т.е. Excel производит автоформат вставляемых данных. Если воспользоваться специальной вставокй и вставить содержимое буфера обмена как UNICODE то вставляется нормально, но это не подходит, когда мне надо вставить не одну ячейку таблицы а всю html-таблицы: распознавания этой таблицы не происходит.

В общем: как отключить автоформат в Excel при вставке в ячейки данных из html-таблицы ?


sad ( 2003-03-07 08:56 ) [1]

для XP офиса делаешь так: применяешь к ячейкам формат текстовый, вставляешь, на иконке в правом нижнем углу от вставленного фрагмента выбираешь «Использовать формат конечных ячеек»
VBA: ActiveSheet.PasteSpecial Format:=»HTML», Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True

Читать еще:  Как выделить одинаковые значения в excel


V >2003-03-07 12:06 ) [2]

Спасибо. 🙂 вот только я совершенно не разбираюсь в VBA. Дело в том что у меня Office 97, и видимо единственным решением проблемы будет написание кода, на этом VBA.
Не мог бы ты подробней рассказать как это сделать, или лучше даже скинуть макрос выполняющий эти действия мне на ящик vidsnap@mail.ru ?


sad ( 2003-03-07 12:18 ) [3]

это собственно текст макроса, то бишь заходишь СервисМакросМакросы
задаешь имя макроса Сщздать и вставляешь строчку приведенную в предыдущем посте.К сожалению,у меня нет возможности проверить это на 97 офисе.


V >2003-03-07 13:43 ) [4]

я создал макрос

Sub HTMLPaste()
ActiveSheet.PasteSpecial Format:=»HTML», Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True
End Sub

потом поставил на страницу кнопку из панели «Формы», и присвоил этой кнопке выполнение макроса HTMLPaste
нажимаю на кнопку получаю ошибку 1004 — Ошибка определяемая объектом или приложением.


V >2003-03-07 20:40 ) [5]


V >2003-03-09 12:35 ) [6]

вопрос остаётся открытым.


Shustryi ( 2003-03-09 13:31 ) [7]

Да уж, проблемка конечно, но она решима, я сделать могу, но дело в том что офис у тебя 97 а у меня XP


V >2003-03-09 20:59 ) [8]

To Shustryi: Спасибо хотя бы за желание помочь 🙂 буду ждать чуда 🙂


sad ( 2003-03-11 09:54 ) [9]

>>VID © (07.03.03 13:43)
потом поставил на страницу кнопку из панели «Формы»
по подробней по поводу страницы..
чтобы макрос работал надо. чтобы в буфере обмена уже была твоя HTML страница. плюс формат ячеек ТЕКСТОВЫЙ.. попробуй поиграть с макро рекордером

Экспорт выделенного диапазона ячеек в HTML код

Макрос предназначен для экспорта выделенного диапазона ячеек книги Excel в код HTML.

Результат (HTML код таблицы) помещается в буфер обмена.

Первая строка выделенного диапазона ячеек считается заголовком таблицы (обрамляется тегами вместо )

Например, мы имеем изначально такую таблицу Excel, где мы выделили диапазон ячеек A1:D9

Запускаем макрос — и в буфере обмена Windows появляется следующий HTML-код:

После вставки этого кода на веб-страницу, видим следующее:

ФИОПравильный результат склоненияНовая формула — DativeCaseСовпадение
БАРАШ Лев ЮрьевичБАРАШУ Льву ЮрьевичуБарашу Льву ЮрьевичуИСТИНА
Абраамян Оганес ДерениковичАбраамяну Оганесу ДерениковичуАбраамяну Оганесу ДерениковичуИСТИНА
Абрамян Артур АлександровичАбрамяну Артуру АлександровичуАбрамяну Артуру АлександровичуИСТИНА
Абрамян Назар ВачагановичАбрамяну Назару ВачагановичуАбрамяну Назару ВачагановичуИСТИНА
Абросимов Антон ВладимировичАбросимову Антону ВладимировичуАбросимову Антону ВладимировичуИСТИНА
АГАФОНОВ Иван НиколаевичАГАФОНОВУ Ивану НиколаевичуАгафонову Ивану НиколаевичуИСТИНА
Агафонов Константин ВикторовичАгафонову Константину ВикторовичуАгафонову Константину ВикторовичуИСТИНА
Агеев Антон СергеевичАгееву Антону СергеевичуАгееву Антону СергеевичуИСТИНА

Собственно, сам код макроса для экспорта таблицы Excel в HTML:

PS: За основу взят код из блога Максима Тарлюн

  • 20378 просмотров

Комментарии

Вопрос, а как вызвать диалоговое окно сохранения как Веб-страница(.html) с отметкой сохранить выделенный лист?

Как-то так можно:

В созданном макросе замены никак не могу добавить несколько замен, как это можно реализовать?
Заранее спасибо за ответ
Sub place()
Dim wfile: wfile = «C:. rs.HTM»
Application.DisplayAlerts = False
SaveTXTfile wfile, Replace(ReadTXTfile(wfile), «?», «a»)
Application.DisplayAlerts = True
End Sub

Не знаю, зачем тут формулы. Для макросов, размер файла не важен, — пользуйтесь макросами для обработки, и ограничений не будет.

Формулы работы с тексом обрабатывают файлы до 32 кб, а эксель катастрофически раздувает HTML файлы при сохранении. Возможно ли как то обойти это органичение?

Работаете с файлом HTML также, как с любым другим текстовым файлом
http://excelvba.ru/code/txt

А как макросом внести изменения в HTML? Если Макрос Excel, то как открыть файл HTML в тексовом виде?

Только если потом макросом вносить правки в файл HTML (каждый раз после сохранения)
Т.к. вмешаться в процесс сохранения файла (save as) не получится

Для оптимизации работы со ссылками на сайте использую фунцию onclick
Пример
Ссылка
При этом иногда ссылки находятся в таблице, которая сохраняется периодически макросом из Excel (save as . html) в самом ексель ячейки с гиперссылками (пример: HYPERLINK(H6,1), в ячейке Н6 прописано — #» onclick=»window.open(‘http://google.com’); window.open(‘http://google.com’);).

Одна из проблем конвертации, кроме всего прочего, это преобразование двойных кавычек » в » получается —
Ссылка

Как «чайнику» можно решить эту проблему не изменяя файл, сохраненный в html (очень часто обновляется).

Заранее благодарен за ответы.

Здравствуйте, Роман
Да, можно и сразу в файл
Замените код

Спасибо за макрос!
Есть вопрос можно ли сохранять выполнение не в буфер обмена а сразу в файл HTML?

очень интересует эта возможность

——- Можно и цвет передать, и гиперссылки корректно обработать.
Но это надо дорабатывать код.
Если готовы оплатить доработку, — сделаем. ——

нужны все атрибуты — границы,цвета ячеек и ссылки..
Как бы мне получить такой макрос?

А если надо с объединениями по столбцам и по строкам, тогда можно сделать так:

sOutput = «»
For j = iFirstCol To iLastCol
If Cells(k, j) <> «» Then
If Cells(k, j).MergeArea.Count > 1 Then
SpanedCell = «» & Cells(k, j) & «»
rSpan0 = » rowspan=» & Chr(34) & 1 & Chr(34)
SpanedCell = Replace(SpanedCell, rSpan0, «»)

cSpan0 = » colspan=» & Chr(34) & 1 & Chr(34)
SpanedCell = Replace(SpanedCell, cSpan0, «»)
ce = ce & SpanedCell
Else
ce = ce & «» & Cells(k, j) & «»
End If
Else
If Cells(k, j).MergeArea.Count = 1 Then ce = ce & » »
End If
Next j
If k = iFirstLine Then ce = Replace(ce, «td», «th»)
r = r & ce & «»
‘MsgBox r
Next k

sOutput = sOutput & r & «»
[K1] = sOutput

Можно и цвет передать, и гиперссылки корректно обработать.
Но это надо дорабатывать код.
Если готовы оплатить доработку, — сделаем.

удалось ли передать цвет ячейки в таблицу? и есть ли возможность содержание гиперссылки этим же макросом отправлять в таблицу?

Подскажите как в таблицу передать цвет заливки ячейки ?

Нет, не поменяется
Макрос выгружает в HTML ТЕКУЩИЕ ЗНАЧЕНИЯ из таблицы
Если надо отобразить обновляемую таблицу Excel на сайте, — есть другие решения (например, библиотеки на PHP для вывода таблиц Excel), а макросы тут вообще ни при чем.

Читать еще:  Как узнать фпс видео

Вопрос такой! Если я изменю значение в Excel, поменяется ли отображение на веб-страничке?

Увы, по Mac ничего подсказать не могу, — не на чем протестировать даже.

Самый простой способ — выводите результат на новый лист Excel

Спасибо за макрос, а подскажите плиз, под Эксель в MacOS какие нужно внести изменения, чтобы в буфер кидало результат?

Отправить комментарий

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

ПОПУЛЯРНЫЕ ПРОГРАММЫ

© 2009-2019 Игорь Вахненко

Конвертирование из Excel в HTML: корректно, качественно, просто.

Архив номеров / 2003 / Выпуск №12 (13) / Конвертирование из Excel в HTML: корректно, качественно, просто.

АЛЕКСЕЙ МИЧУРИН

Конвертирование из 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()

3: ‘ макрос, сохраняющий выделенный фрагмент таблицы

4: ‘ в текстовом формате с отметками о форматировании

6: With ActiveWindow.RangeSelection

7: c1 = .Columns.Column

8: c2 = .Columns.Count — 1 + c1

10: r2 = .Rows.Count — 1 + r1

12: If (r1 — r2 = 0 And c1 — c2 = 0) Then

14: «что-то мало выделено (для сохранения) ,-)», _

15: vbCritical, «сообщение макроса»

17: fileSaveName = Application.GetSaveAsFilename( _

18: InitialFileName:=»file», _

19: fileFilter:=»Text Files (*.txt), *.txt», _

20: Title:=»сохранение страницы в нашем формате»)

21: If fileSaveName = False Then

23: «файл-то не выбран. никаких действий не предпринято.», _

24: vbCritical, «сообщение макроса»

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)

Этот макрос сохраняет выделенную часть прайса в заданный файл. Макрос можно добавить к рабочей версии прайса и сделать для его вызова кнопку (вне области печати), а можно хранить в отдельном файле. Поместить его в документ очень просто: вызовите редактор Visual Basic (меню: «Сервис –> Макрос –> Редактор Visual Basic»; или ), создайте новый модуль (меню: «Вставить –> Модуль») и введите приведённый здесь текст (без номеров строк). Теперь можно нарисовать кнопку (инструмент на панели «Формы») и назначить ей макрос.

Давайте вкратце рассмотрим, как работает этот код.

Первая строка – объявление макроса. Как видите, я назвал его незамысловато 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:

5: # my ($TRUE, $FALSE)=(‘Истина’, ‘Ложь’);

Ссылка на основную публикацию
Adblock
detector
Рубрика: Веб / Веб-технологии | Дополнительные материалы