Excel с макросом в html

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

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

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

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

исходная таблица Excel для экспорта в HTML

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

результат экспорта таблицы в 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 & ">"
 
            'Если пусто, прописываем &nbsp;
            If oCurrentCell.Text <> "" Then sValue = oCurrentCell.Text Else sValue = "&nbsp;"
            'Если жирный
            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: За основу взят код из блога Максима Тарлюн

Excel to HTML

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):
Excel table

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:
Publish to HTML Excel feature

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 name​sh​ данные как веб-страницу​Если Вы создали симпатичную​

Преобразуем таблицы Excel в HTML при помощи инструмента «Сохранить как веб-страницу»

​ «» Next k​ возможности, например, производить​ Но это ещё​ кнопку​ Преимущество данного способа​ нажать на кнопку​ кнопке​ а именно XLS,​ место. Более подробно​ Excel в HTML:​AutoRepublish​ в то же​

​ чистый! Будет здорово,​(Имя файла) и​(Публикуемые элементы). Здесь​ и дополнительно создадите​ таблицу в Excel​ sOutput = sOutput​ массовую конвертацию объектов​ не всё. Нам​«OK»​ перед стандартным преобразованием​«Finish»​«Next»​

Преобразовываем файл Excel в HTML

​ XLSX, XLSB или​ об этом смотрите​У​(Автопереиздание), то каждый​ место, иначе ссылки​ когда, преобразовав большую​

  1. ​ выберите папку на​ Вы выбираете, какие​​ папку, в которой​​ и теперь хотите​​ & «​​ по указанному направлению,​ необходимо сохранить документ​.​ HTML в Excel​.​.​ XLSM, то неопытный​
  2. ​ в разделе Вспомогательные​​словное форматирование​​ раз при сохранении​​ будут неверными. Если​ таблицу со сложным​
    • ​ жёстком диске, веб-папку,​ ​ части рабочей книги​​ будут храниться все​ опубликовать её как​» ‘Заканчиваем таблицу​ можно порекомендовать приобрести​ в нужном формате.​После этого можно приступить​ заключается в том,​Важно знать, что перед​После этого открывается окно,​ пользователь может взяться​ файлы и гиперссылки.​
    • ​не поддерживается при​ ​ рабочей книги будет​​ Вы повторно сохраняете​ дизайном, Вы откроете​ веб-сервер, HTPP или​ Excel необходимо экспортировать​ вспомогательные файлы для​ веб-страницу, то простейший​ ‘ Копируем полученный​ одну из специализированных​

    Преобразовываем файл Excel в HTML

  3. ​ Для этого кликаем​ непосредственно к процедуре​​ что можно выбирать​​ запуском утилиты Launch​ в котором указывается,​ за голову. Но​На веб-странице отображается красный​​ сохранении листа Excel​​ появляться сообщение с​​ веб-страницу в другое​​ её в любом​Преобразовываем файл Excel в HTML​ FTP-адрес, куда требуется​ в веб-страницу. В​ корректного отображения веб-страницы​
    • ​ способ это сделать​ HTML в буфер​ платных утилит.​ по пиктограмме в​ конвертации. Для этого​​ и конвертировать сразу​​ Abex HTML to​
    • ​ куда именно будет​ на самом деле​​ крест (Х)​​ как​ просьбой подтвердить, хотите​ место, Microsoft Excel​ редакторе HTML и​ сохранить веб-страницу.​ выпадающем списке​

    Преобразовываем файл Excel в HTML

    ​ (картинки, кнопки и​ – экспортировать её​​ обмена With GetObject(«New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}»)​​Автор: Максим Тютюшев​ виде дискеты в​ на верхней панели​ несколько объектов. После​ Excel Converter, как​ устанавливаться программа. Конечно,​ ничего страшного тут​. Красный крестик обозначает​

  4. ​Single File Web Page​​ ли Вы включить​​ скопирует следом вспомогательную​ почистите код перед​​Совет:​​Choose​ текстуры для фона).​ в старый добрый​ .SetText sOutput: .PutInClipboard​rom777​
  5. ​ левом верхнем углу​​ следует нажать на​​ того, как файлы​ бы он не​ при желании можно​ нет. Конвертация в​ не обнаруженный рисунок​(Веб-страница в оном​​ или отключить автопереиздание.​​ папку автоматически.​ публикацией. В результате​
    • ​Если Вы впервые​​(Выбрать) есть следующие​Single File Web​ файл HTML. В​ End With ‘​: Здравствуйте.​ окна.​
    • ​ кнопку​​ выделены, жмем на​ проводился, вручную или​ изменить директорию, но​ современных версиях Excel​ или другой графический​ файле), поэтому убедитесь,​ Если необходимо, чтобы​Если Вы сохраняете веб-страницы​​ страница на сайте​​ преобразуете рабочую книгу​ варианты:​​Page​​ этой статье мы​ Копируем полученный HTML​Преобразовываем файл Excel в HTML
    • ​На просторах интернета​​Открывается окошко, в котором​«Convert»​ кнопку​ сразу после установки​ без особой нужды​ встроенными инструментами программы​ элемент. Причина скорее​ что Вы сохраняете​
    • ​ лист Excel автоматически​​ в разные места​ будет загружаться заметно​ Excel в файл​Entire workbook​(Веб-страница в одном​ рассмотрим несколько способов​ в файл Filename​ нашёл файл-помощник для​ говорится, что существующий​.​​«Открыть»​​ приложения, следует завершить​
  6. ​ делать это не​​ выполняется довольно просто​ всего таже, что​ его как​ опубликовывался, тогда выбираем​ или если файл​​ быстрее.​​ HTML, то будет​(Всю книгу) –​​ файле) – так​​ конвертировать данные из​ = «G:test.html» ‘задаём​Преобразовываем файл Excel в HTML
  7. ​ переноса прайса из​​ документ может иметь​​Затем будет выполнена процедура​.​​ работу и закрыть​​ рекомендуется. Так что​ и в большинстве​ и при нерабочих​Web Page​Enable…​ Excel содержит гиперссылки​

​Используя инструмент «Сохранить как​​ разумно сначала сохранить​ опубликована будет вся​ Вы сохраните рабочую​ Excel в HTML,​ здесь полный путь​ таблицы Excel в​ возможности, несовместимые с​ преобразования. После её​Выбранные объекты будут отображены​ все программы пакета​ просто жмем на​ случаев относительно корректно.​

  1. ​ гиперссылках. Просто убедитесь,​(Веб-страница). Гистограммы, цветовые​(Включить…) и жмём​ на внешние веб-сайты,​ Веб-страницу», важно понимать,​ веб-страницу на жёсткий​ книга, включая все​ книгу или выделенные​​ определим плюсы и​​ к файлу Set​ HTML:​ форматом веб-страницы. Жмем​ завершения откроется небольшое​ в основном окне​ Microsoft Office. Если​ кнопку​​ Кроме того, можно​​ что Вы всегда​ шкалы и наборы​​ОК​​ то в таких​
  2. ​ как работают его​​ диск, чтобы при​ её листы и​​ данные в одном​ минусы каждого способа​ fso = CreateObject(«scripting.filesystemobject»)​Sub ExportHTML() ‘​ на кнопку​ окошко, в котором​ утилиты. После этого​ вы этого не​«Next»​ сказать, что сам​
  3. ​ храните веб-страницу и​​ значков не поддерживаются​.​​ случаях создаются​ главные параметры, чтобы​ необходимости можно было​ вкладки для навигации​
  4. ​ файле, все вспомогательные​​ и выполним вместе​​ Set ts =​ макрос для экспорта​«Нет»​ сообщается об этом,​ кликаем по левому​Преобразовываем файл Excel в HTML

​ сделаете, то при​​.​ процесс интуитивно понятен.​ вспомогательную папку в​ обоими форматами веб-страниц.​Однако, могут возникнуть обстоятельства,​абсолютные​ не совершить наиболее​ внести правки перед​ между листами.​ файлы будут встроены​ с Вами такое​ 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 в HTML

​ доверенным лицом. В​ сохранить книгу Excel​ преобразовании файлов Excel​ права на ее​ выбираете​Selection​ веб-страницы (.htm или​ код.​ — 1 iLastCol​, хотя его можно​Но нужно учесть, что​После этого переходим к​ этом окне на​

​ установить иконку утилиты​ для перевода файлов​ наступить в различных​ в горизонтальный текст.​​ таком случае Вы​ как веб-страницу, затем​ в HTML.​​ редактирование. В таком​Items on …​(Выделенное) и нажмите​ .html), так что​Необходим перенос из​ = iFirstCol +​ оставить и текущим.​ если вы используете​ блоку настроек​ кнопку​

​ на рабочий стол​ из формата HTML​ случаях. Возможно, нужно​Преобразовывая рабочую книгу Excel​ можете временно или​​ открыть получившуюся веб-страницу​​Как известно, веб-страницы часто​ случае, нажав кнопку​​(Элементы из …),​​Save​​ любой сможет посмотреть​​ файла Excel данных​ Selection.Columns.Count — 1​​ Далее кликаем по​​ бесплатную пробную версию​«Output setting»​«Yes»​ (по умолчанию включено)​​ в Эксель. Преимущества​​ конвертировать данные веб-страницы​

Преобразовываем файл Excel в HTML

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

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​ ячейки Вы планируете​

  1. ​Чтобы сохранить только текущий​ в режиме онлайн​ прилагаю.​ Cells(iFirstLine, iFirstCol).Text &​ кнопку​«Файл»​ же директории, где​ его номер и​ программы, которые пользователь​ достойные варианты англоязычные​​ редактирование, а потом​​ в ячейке настройте​​ публикация для текущей​​ Excel, как это​

    Приветственное окно установщика программы Abex HTML to Excel Converter

  2. ​ файлы, такие как​(Добавить к файлу).​ опубликовать.​ лист, выберите вариант​ через веб-браузеры, не​rom777​​ «» For k​​«Сохранить»​.​​ расположен исходник в​​ ваше имя (можно​

    Лицензионное соглашение в установщике программы Abex HTML to Excel Converter

  3. ​ внес ранее. Если​ без русификации. Давайте​ снова преобразуют в​ по левому краю.​ сессии Excel, но​ делали ранее.​ диаграммы и фоновые​Поставьте галочку​Previously published items​Selection: Sheet​ запуская Excel.​​: Не поняла, где​​ = iFirstLine To​

    Окно указания директории установки программы Abex HTML to Excel Converter

  4. ​.​В открывшемся окне клацаем​ формате HTML. Если​ псевдоним), а после​ пользователя что-то не​ рассмотрим алгоритм работы​ файл с прежним​

    Окно настройки отображения наименования в стартовом меню программы Abex HTML to Excel Converter

  5. ​Элементы, которые добавляются в​ в следующий раз,​Поэтому, лучшим способом будет​ текстуры, на тот​AutoRepublish every time this​(Опубликованные ранее элементы).​(Выделенное: Лист). На​Чтобы преобразовать данные Excel​ вы присваиваете значение​ iLastLine ‘ Обрабатываем​​После этого файл будет​​ по наименованию​

    Окно выставления иконок программы Abex HTML to Excel Converter

  6. ​ же вы желаете​ этого нажать на​ удовлетворяет, то он​ в одной из​ расширением для выполнения​ существующую веб-страницу, всегда​ когда Вы откроете​ сначала обновить исходную​ же веб-сервер, Excel​ workbook is saved​​ Этот вариант позволяет​​ следующем шаге Вам​ в HTML, выполните​ ТХТ​ Excel таблицу If​ сохранен с выбранным​«Открыть»​ сохранять файлы в​​ кнопку​​ может нажать на​

    Запуск установки программы Abex HTML to Excel Converter

  7. ​ самых удобных программ​

    Процедура установки программы Abex HTML to Excel Converter

  8. ​ его первоначальной функции.​появляются в самом конце​ книгу, она будет​ книгу Excel, внеся​ все ссылки создаёт​(Автопереиздание при каждом​ повторно опубликовать лист​ будет предложено выбрать:​​ следующие шаги. Эти​Alex77755​​ (k 2​ расширением.​.​ отдельной папке, то​«Register»​ кнопку​​ для выполнения вышеуказанного​​ Это связано с​

    Завершение установки программы Abex HTML to Excel Converter

  9. ​ страницы​ включена снова.​ определенные изменения, затем​относительными​ сохранении книги), если​ или элементы, которые​ опубликовать целый лист​ инструкции подходят для​: если​ <> k /​Также существует другая возможность​Вслед за этим запускается​ для этого следует​. Если вы пока​«Back»​ направления конвертации —​ тем, что с​, в то время​Чтобы отключить автопереиздание навсегда​ сохранить её как​. Относительная ссылка (URL)​ хотите, чтобы рабочая​ Вы ранее уже​ или только некоторые​​ Excel 2013, 2010​​txt=soutput​ 2) Then ‘проверяем​ перейти в окно​ окно открытия файла.​ переставить переключатель в​ ключ не приобрели​

    Сообщение о необходимости закрыть оффисные доекменты в программе Abex HTML to Excel Converter

  10. ​и произвести соответствующее​ Abex HTML to​ таблицами намного проще​ как Вы хотите​ для всех выбранных​ рабочую книгу Excel​ указывает на файл​ книга или выбранные​ публиковали. Если Вы​ его элементы.​​ и 2007.​​, то​ на четность sLine​ сохранения документа.​ Нужно перейти в​ позицию​ и хотите испытать​ редактирование настроек. Если​​ Excel Converter.​​ работать именно в​

    Окно регистрации в программе Abex HTML to Excel Converter

  11. ​ поместить их в​ элементов, откройте книгу​ (.xlsx), и только​ внутри того же​ элементы автоматически публиковались​ хотите удалить один​Вы можете дать название​В рабочей книге Excel​​rom777​​ = «» ‘Если​

    Переход к добавлению файлов для конвертации в окне программы Abex HTML to Excel Converter

  12. ​Перемещаемся во вкладку​ ту директорию, где​«Customize»​ урезанную версию приложения,​ же он со​После того, как был​ Excel. Давайте узнаем,​ верхней части страницы​ Excel, перейдите в​ после этого снова​ веб-сайта; она указывает​ после каждого сохранения​ из элементов списка,​ веб-странице, нажав кнопку​ откройте вкладку​: Я не специалист​ пусто, прописываем If​​«Файл»​​ расположен файл в​

    Открытие файлов в окне программы Abex HTML to Excel Converter

  13. ​. При этом по​ то в этом​ всем согласен, то​ скачан инсталлятор программы​ как можно перевести​ или по середине.​ диалоговое окно​ преобразовать её в​ имя файла или​
    • ​ книги. Далее в​
    • ​ просто выделите его​
    • ​Change Title​

    ​File​

    Выбор формата файла Excel в программе Abex HTML to Excel Converter

  14. ​ в этом деле).​ oCurrentCell.Text <> «»​​.​​ формате HTML, который​​ умолчанию объекты будут​​ случае просто нажмите​ для начала установки​ Abex HTML to​ таблицу из формата​ Это нормальное явление​​Publish As Web Page​ веб-страницу.​​ корневую папку вместо​ этой статье я​ и нажмите​(Изменить) в правой​(Файл) и нажмите​ Скрипт работает по​ Then sValue =​Перейдя в новое окно,​ следует преобразовать. При​ сохраняться в папке​ на кнопку​​ следует нажать на​​ Excel Converter, запускаем​ HTML в Эксель.​ при сохранении файла​​(Публикация веб-страницы) и​​Если Вы поставили галочку​ полного имени сайта​ объясню работу этой​​Remove​​ части диалогового окна.​

    ​Save As​ выделенным ячейкам в​ oCurrentCell.Text Else sValue​ щелкаем по пункту​ этом в поле​«Output»​

    Переход к выбору директории сохранения файла в программе Abex HTML to Excel Converter

  15. ​«Remind me later»​ кнопку​ его, выполнив по​Скачать последнюю версию​ Excel в уже​ нажмите кнопку​ напротив параметра​ (например, href=»/images/001.png»). Когда​​ функции более подробно.​​(Удалить).​

    Выбор директории сохранения файла в программе Abex HTML to Excel Converter

  16. ​ У Вас также​(Сохранить как).Если необходимо​ документе и копирует​ = » «​ левого вертикального меню​ форматов файлов данного​​, которая в свою​​.​

    Переход к конвертации в программе Abex HTML to Excel Converter

  17. ​«Install»​ нему двойной щелчок​ Excel​ существующую веб-страницу. Чтобы​Publish​AutoRepublish​ Вы удаляете любой​​Поставьте галочку​​Title​ будет возможность установить​ экспортировать только часть​ их в буфер​ ‘Если жирный ‘If​«Сохранить как»​

Процедура конвертации завершена в программе Abex HTML to Excel Converter

​ окна должен быть​ очередь размещена в​После выполнения вышеуказанных действий​.​ левой кнопкой мыши.​Читайте также: Как перевести​

Способ 2: преобразование с помощью стандартных инструментов Excel

​ переместить данные в​(Опубликовать). В разделе​(Автопереиздание) в диалоговом​ элемент, сохранённый как​Open published Web page​(Заголовок). Чтобы добавить​

  1. ​ или изменить заголовок​ данных (например, диапазон​​ обмена. Потом добавляю​​ oCurrentCell.Font.Bold = True​

    Перемещение во вкладку Файл в Microsoft Excel

  2. ​.​ установлен один из​​ корневом каталоге диска​​ запускается непосредственно окно​

    Переход к открытию файла в Microsoft Excel

  3. ​Происходит процедура установки утилиты.​ Открывается приветственное окно​ HTML в Word​ другое место на​Items to publish​ окне​ относительная ссылка, Microsoft​ in browser​ заголовок веб-страницы, который​ чуть позже, это​ ячеек, сводную таблицу​ в файл html.​
    • ​ Then sValue =​
    • ​После этого запускается окно​
    • ​ следующих параметров:​

    ​C​ программы Abex HTML​После её завершения запускается​ установщика. Щелкаем по​Формат HTML является языком​ странице, Вы должны​​(Публикуемые элементы) в​​Publish As Web Page​

    Окно открытия файла в Microsoft Excel

  4. ​ Excel автоматически удаляет​(Открыть страницу в​ будет отображаться в​ описано далее на​ или диаграмму), то​sLine = sLine​ «​ сохранения документа, и​Все файлы Excel;​.​ to Excel Converter.​ окно, в котором​

    Переход к сохранению файла в Microsoft Excel

  5. ​ кнопке​ гипертекстовой разметки. Объекты​ отредактировать получившуюся веб-страницу​ списке​(Публикация веб-страницы), который​ связанный файл из​​ браузере), если хотите​​ заголовке браузера, нажмите​

    Окно предупреждения в Microsoft Excel

  6. ​ шаге 6.​ предварительно выделите эту​ & «после этой​» & sValue &​ все дальнейшие действия​Все файлы;​Если вы желаете сами​​ Для добавления файла​​ сообщается об этом.​«Next»​ с данным расширением​ в любом HTML-редакторе,​​Choose​​ мы упоминали ранее​ вспомогательной папки.​ посмотреть веб-страницу сразу​
    • ​ кнопку​
    • ​Нажмите кнопку​
    • ​ часть.​
    • ​ строчки добавь проверку​

    ​ «​ проводятся точно так​Все веб-страницы.​​ указать место сохранения​​ в формате HTML​

    Окно сохранения документа в Microsoft Excel

  7. ​ Если пользователь хочет​(​ чаще всего применяются​

​ либо изменить расположение​(Выбрать) выберите элемент,​ в этой статье,​

  1. ​Итак, главное правило –​​ после сохранения.​​Change​

    Перемещение во вкладку Файл в программе Microsoft Excel

  2. ​Publish​В диалоговом окне​ значения j​​» ‘Если курсив ‘If​​ же, как было​

    Переход в окно сохранения файла в Microsoft Excel

  3. ​Только в этом случае​ объекта, то следует​ для конвертации следует​ тут же запустить​«Далее»​ в интернете, как​ элементов в книге​

Окно сохранения документа в программе Microsoft Excel

​ который Вы не​ тогда Ваша веб-страница​всегда сохраняйте веб-страницу и​Нажмите кнопку​(Изменить) справа от​(Опубликовать) – откроется​Sav​типа такого:​ oCurrentCell.Font.Italic = True​ описано в предыдущем​ нужный нам файл​ кликнуть по кнопке,​ нажать на кнопку​ программу автоматически, то​

​).​

lumpics.ru

Экспорт таблицы из Excel в HTML

​ статические веб-страницы. Но​​ Excel и преобразовать​
​ хотите опубликовывать и​ будет автоматически обновляться​ вспомогательные файлы в​Publish​ пункта​
​ диалоговое окно​e As​select case j​ Then sValue =​ варианте.​ отобразится в окне.​ расположенной справа от​«Add Files»​ он должен проследить,​Вслед за этим открывается​ нередко они могут​ ее заново в​ нажмите кнопку​ каждый раз, при​ одном месте​(Опубликовать). Все готово!На​Title​Publish 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, созданный​
​ пункта​
​Item to publi​ книгу или выделенные​ Попробую.​ = iFirstLine Then​ тем пользователям, которые​ формате HTML отобразится​ местом сохранения. Затем​ для конвертации. Затем​

CyberForum.ru

​ Для выхода из​

  • Download demo project — 15.5 Kb

Sample Image - exportHTML.gif

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>", ">&nbsp;</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. Пример прайса

Рисунок 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. Предупреждение макроса

Рисунок 2. Предупреждение макроса

В строках с 17 по 20 мы вызываем диалог Application.GetSaveAsFilename, чтобы пользователь мог выбрать имя файла (см. рис. 3).

Рисунок 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/&/&amp;/g;

17:     $t=~s/»/&quot;/g;

18:     $t=~s/>/&gt;/g;

19:     $t=~s/</&lt;/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. Конечный прайс

Рисунок 4. Конечный прайс

Наверное, для реальных документов будет несложно сформулировать условия, по которым макрос будет сам определять область прайса (или другого документа), подлежащую сохранению. Тогда этот процесс можно автоматизировать. Моё решение (сохранение выделенной области) скорее универсально, чем удобно.

Наконец, читатель может справедливо спросить, зачем макрос для Excel сохраняет скрытые строки, ведь их можно отсеять уже на стадии экспорта? Снимаю шляпу перед внимательностью читателя (втайне надеясь на ответный жест в адрес моей проницательности). Сохранять скрытые строки действительно совсем не обязательно, просто я привык сохранять всё. Причины? Возможно, скрытые строки всё-таки понадобятся. Или вы захотите точно знать, какие строки были проигнорированы (мой Perl-сценарий, как вы помните, сообщает о каждой скрытой строке). Кроме того, информация о высоте строк может быть критерием для идентификации заголовков… Хотя, конечно, вы можете слегка модифицировать VB-код и не сохранять скрытые строки.

По скрипту на Perl

Конечно, весь HTML-код (а это большая часть скрипта) вы скорее всего значительно измените. Конечно, вам придётся изменить количество столбцов, шапку, многие удалят из HTML-кода мои пустые строчки-разделители, накрутят вложенных таблиц, изменят DHTML-функции, добавят CSS-таблицы… Но это не самое главное и не принципиальное изменение.

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

Несомненно, будет полезна функция сравнения текущего прайса с предыдущим, которая будет добавлять информацию об обновлениях и динамике цен.

Я бы советовал организовать подобные процедуры (не относящиеся непосредственно к HTML-вёрстке) в виде отдельных программ или модулей. Кстати, часть работы по HTML-вёрстке можно доверить механизму SSI, а скрипт пусть собирает SHTML-документ. Набор простых инструментов всегда удобнее, гибче и управляемее, чем один универсальный. Держитесь подальше от грабель, по которым гуляют создатели телефона-микроволновки и телевизора-зубной щётки.

Список советов и предложений можно продолжать бесконечно, но я думаю, что уже разбудил вашу фантазию, и дальше вы справитесь и без меня. Адаптация приведённого здесь примера к вашим конкретным условиям, возможно, потребует несколько часов работы. Зато потом вы будете щедро вознаграждены, ведь все последующие обновления информации на вашем веб-сервере вы будете делать буквально в несколько касаний клавиатуры и мыши!

Facebook

Twitter

Мой мир

Вконтакте

Одноклассники

Google+

Like this post? Please share to your friends:
  • Excel родительный падеж в именительный
  • Excel с макросами для ios
  • Excel робота с таблицами
  • Excel рисунок под ячейки
  • Excel рисунок под текстом