09 сентября 2019

Новый генератор XLSX-файлов в EhLib 9.4

    В EhLib всегда была возможность экспорта содержимого DBGridEh в MS Excel. Но EhLib версии 9.4 была дополнена новым классом TXlsMemFileEh, который не привязан к DBGridEh и является настоящим генератором файлов в формате MS Excel. Т.е. при желании используя TXlsMemFileEh можно создавать XLSX-файлы на основании любых данных.
    Для меня главным преимуществом этой версии экспорта является то, что он с поразительной точностью может воспроизводить MultiTitle-шапку таблицы. Смотрите на DBGridEh:
и на результат экспорта:
"Одно лицо"! И для этого нужно написать всего несколько строк (код взят из EhLib\Demos\XlsFileEh\Unit2.pas):
var
  TitleMarix: TDBGridMultiTitleExportNodeMatrixEh;
  ci, ri: Integer;
  ti: TDBGridMultiTitleExportNodeEh;
begin
  ...
  CalcMultiTitleMatrix(DBGridEh1, TitleMarix);
  for ci := 0 to Length(TitleMarix)-1 do
  begin
    for ri := 0 to Length(TitleMarix[ci])-1 do
    begin
      ti := TitleMarix[ci, ri];
      if (ti <> nil) then
      begin
        Sheet.Cells[ci, ri + 1].Value := TitleMarix[ci, ri].Text;
        if (ti.MergeColCount > 0) or (ti.MergeRowCount > 0) then
        begin
          Sheet.MergeCell(ci, ri + 1, ti.MergeColCount, ti.MergeRowCount);
        end;
      end;
    end;
  end;
  FreeMultiTitleMatrix(TitleMarix);
    Причиной моего интереса к этому функционалу является то, что когда-то подобный экспорт DBGridEh, но через OLE, я реализовывал в одном из проектов. В том проекте любая табличка должна была уметь выгружаться в Excel и если не было специальных шаблонов, то был использован универсальный экспорт. Теперь всю кучу моего кода, написанную тогда, можно было бы не писать...

2 комментария:

  1. Анонимный12 ноября, 2023 22:35

    Интересно, спасибо, жаль картинки не подгружаются(

    ОтветитьУдалить
  2. Анонимный15 ноября, 2023 18:11

    Да не, извиняюсь, что дернул. Картинки из этого поста у меня не отображались просто (из рф). Только сейчас догадался через VPN попробовать) Спасибо за пост, и вообще за блог. Наткнулся случайно, читал взахлёб) EhLib последний, да))

    ОтветитьУдалить