|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Компонент для перевода Excel в HTML
Занимался как то переводом Excel файлов в HTML формат для публикации на сайте. В Delphi это можно делать, например, так:
Код:
var ex :variant; excelname, fname : string; begin excelname:= extractfilepath(application.ExeName)+'Книга.xls'; Ex := CreateOleObject('Excel.Application'); Ex.Visible:= true; // Откроем Excel Ex.WorkBooks.Open(excelname,ReadOnly:=True); fname:= ChangeFileExt(excelname,'2.html'); Ex.ActiveSheet.SaveAs(fname,44); end; Поэтому родилась идея создания класса наподобие таблицы, где программист может самостоятельно управлять стилем каждой ячейки. Каждая ячека описана как Region - запись вида Код:
Region=record main : boolean; colspan : integer; rowspan : integer; style : string[255]; id : string[255]; cl : string[255]; value : string; end; Весь лист Excel рассматривается как совокупность таких регионов THtmlSheet. Объект THtmlSheet построен таким образом, чтобы сделать синтаксис обращения к нему максимально похожим на работу с листом ExcelSheet. В результате появился на свет компонент ExcelToHtml. Ниже приведу пример использования компонента. В нем переводится файл Excel в Html, при этом производятся различные манипуляции со стилями ячеек. Добавим модуль ComObj. Кинем компонент ExcelToHtml на форму. Опишем, например, такое действие кнопки. Код:
procedure TForm1.Button1Click(Sender: TObject); var HSheet:THtmlsheet; ex, Exsheet :variant; header, footer, htmlcode, excelname, table, fname : string; ht:textfile; i,j,k,l:integer; begin excelname:= extractfilepath(application.ExeName)+'Книга.xls'; Ex := CreateOleObject('Excel.Application'); Ex.Visible:= true; // Откроем Excel Ex.WorkBooks.Open(excelname,ReadOnly:=True); Exsheet:=Ex.ActiveSheet; //Создадим объект hsheet:=ThtmlSheet.Create; // Переведем лист Excel в объект HTMLSheet hsheet.ExcelSheetToHTMLSheet(Exsheet,'B2:E12'); // Закроем Excel Ex.WorkBooks.close; Ex.Quit; // Опишем шапку веб-страницы. Здесь CR - перевод строки header:='<html>'+CR+'<head>'+CR+'<title>Мой сайт</title>'+CR; header:=header+'<link rel="stylesheet" type="text/css" href="style.css">'+CR; header:=header+'<body>'+CR; // Тут добавляем объявление таблицы с любым стилем header:=header+'<table width=50%>'+CR; header:=header+'<caption>Таблица 1 - Всякие животные</caption>'+CR; // Тут закрываем таблицу и веб-страницу footer:= '</table>'+CR+'</div>'+CR+'</html>'+CR; // Объединим ячейки сохранив значений всех ячеек hsheet.Merge('A6:D8',true); // Тут немножко поиграем со стилями и значениями for i:=1 to Hsheet.RowsCount do for j:=1 to Hsheet.ColumnsCount do BEGIN // Изменим стиль ячеек со змеями. сделаем зеленый фон if ansipos('змеи', Hsheet.Cells[i,j].value)<>0 then Hsheet.Cells[i,j].style:='bgcolor = green'; // Изменим значения ячеек с насекомыми. добавим курсив if ansipos('насекомые', Hsheet.Cells[i,j].value)<>0 then Hsheet.Cells[i,j].value:='<em>'+ Hsheet.Cells[i,j].value+'</em>'; // И еще присвоим ячейкам с птицами класс tdptiz if ansipos('птицы', Hsheet.Cells[i,j].value)<>0 then Hsheet.Cells[i,j].cl:='tdptiz'; // И так далее, можно делать что угодно END; // переведем наш объект в HTML таблицу из тегов table:= hsheet.HTMLSheetToHTMLTable; // HTML код нашей страницы htmlcode:=header+table+footer; fname:= ChangeFileExt(excelname,'.html'); assignfile(ht,fname); rewrite(ht); writeln(ht,htmlcode); closefile(ht); showmessage('Перевод HTMLSheet в HTML таблицу - успешно!'); end; Конечно, имеются недостатки. Компонет работает через OLE, поэтому скорость не очень большая. Для таблиц с несколькими тысячами строк вообще не рекомендую использовать. Вот если разберусь с устройством формата EXCEL, то может смогу ускорить работу компонента. Если есть уже знаток формата excel, можно объединить усилия. Жду отзывов и предложений. Последний раз редактировалось alexan0308, 08.06.2011 в 09:55. |