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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 21:18   #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;
       // Откроем Excel
       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;
       // Откроем 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;

      // Объединим ячейки 'A6:D8', сохранив значений всех ячеек
            hsheet.Merge('A6:D8',true);
      // Объединим ячейки 'A9:D11', сохранив значение только первой ячейки
           hsheet.Merge(9,1,11,4,false);

      // Тут немножко поиграем со стилями и значениями
      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 вне форума Ответить с цитированием
Старый 31.08.2018, 09:28   #2
vikaharkov
Новичок
Джуниор
 
Регистрация: 31.08.2018
Сообщений: 1
По умолчанию

Цитата:
Сообщение от alexan0308 Посмотреть сообщение
Если есть уже знаток формата excel, можно объединить усилия.
Жду отзывов и предложений.
ШТИРЛИЦ: Штирлиц понимал, что он лучший, но в глубине души он ждал подтверждения об этом из центра.

Прошло семь лет...

ЦЕНТР: - Вы лучший и единственный

ШТИРЛИЦ: Штирлиц с облегчением вздохнул - свершилось! Подтверждение пришло, теперь можно уйти на пенсию, кормить голубей и любоваться видом гор в Альпах...

___________________________________

Здравствуйте, Алекс! Просто так зашла, полюбоваться вашей работой и кинуть реплику. А у меня в голове задача более прозаическая, но не менее важная для человечества - встроить в сайт кучочек таблицы Excel, но чтобы в ней работали формулы (суммирование количества едениц в заказе в карточке товара). Эх, мне бы ваши проблемы...

Ладно, пока...!
vikaharkov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из Excel в XML по опред. требованиям tsuman Microsoft Office Excel 10 28.03.2011 13:09
Перевод сайта с HTML/Javascript на PHP/MySQL SODUL Помощь студентам 0 15.01.2011 01:56
html в excel novitskiias Microsoft Office Excel 3 09.11.2010 16:06
перевод из StringGrid в Excel в заранее заготовленую таблицу SPD Общие вопросы Delphi 3 25.08.2010 11:29
Перевод текста из HTML в txt Valkiria Помощь студентам 8 10.10.2007 18:39