Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 00:35   #1
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию Компонент для перевода Excel в HTML

Занимался как то переводом Excel файлов в HTML формат для публикации на сайте. В Delphi это можно делать, например, так:
Код:
var ex :variant; excelname, fname : string;
begin
       excelname:= extractfilepath(application.ExeName)+'Книга.xls';
       Ex := CreateOleObject('Excel.Application');
       Ex.Visible:= true;
       Ex.WorkBooks.Open(excelname,ReadOnly:=True);
       fname:= ChangeFileExt(excelname,'2.html');
       Ex.ActiveSheet.SaveAs(fname,44);
end;
Значение 44 как раз отвечает за перевод в HTML формат. Все хорошо, но при этом получается файл с нагромождением стилей большого объема. А ведь иногда хочется управлять стилем веб-страницы, использовать Javascript.

В результате появился на свет компонент 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;   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);
           // или  hsheet.Merge(6,1,8,4,true);
      // Объединим ячейки 'A9:D11' сохранив значение только первой ячейки
           hsheet.Merge(9,1,11,4,false);

      //удалим скрытые строки и столбцы

     for i:=  hsheet.RowsCount downto 1 do
             if hsheet.Rows[i].hidden then hsheet.RowsDelete(i);
     for j:= hsheet.ColumnsCount downto 1 do
             if hsheet.Columns[j].hidden then hsheet.Columnsdelete(j);    

      // Тут немножко поиграем со стилями и значениями
      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;
Скачать компонент с исходником примера можно здесь (215 kB).
Конечно, имеются недостатки. Компонет работает через OLE, поэтому скорость не очень большая.
Для таблиц с несколькими тысячами строк вообще не рекомендую использовать. Вот если разберусь с устройством формата EXCEL, то может смогу ускорить работу компонента. Если есть уже знаток формата excel, можно объединить усилия.
Жду отзывов и предложений.
alexan0308 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОИСК: Компонент для работы с html или flash плеерами MyIE Компоненты Delphi 3 06.06.2011 14:19
Калькулятор для перевода из 10-ой в 2-ую с/сч Night Wolf92 Microsoft Office Excel 5 30.04.2011 22:40
Компонент для вывода таблиц Excel (.xls) в Joomla zenner WordPress и другие CMS 1 23.11.2010 22:01
Требуется программист для перевода. Killy Фриланс 6 21.10.2010 16:42
Компонент для HTML dimfil Компоненты Delphi 3 18.09.2010 11:30