zoukankan      html  css  js  c++  java
  • 多表头的DBGridEH导出到Excel中

    多表头的DBGridEH导出到Excel中
    把自己的解决法子说一下,虽然解决的不是很完美,缺少单元格合并和字体设置。
    我重写了单元DBGridEhImpExp中的函数TDBGridEhExportAsXLS.WriteTitle
    希望有高手继续完善这个函数,让之最终导出的Excel格式和Elib一样。
    //------------------------------------------------------------------
    procedure TDBGridEhExportAsXLS.WriteTitle(ColumnsList: TColumnsEhList);
    var
     i, k: Integer;
     FPTitleExpArr: TTitleExpArr;
     ListOfHeadTreeNodeList: TList;
     ColSpan, RowSpan: Integer;
     str1:String;
     L: Word; //writestringcell
    begin
     if ColumnsList.Count = 0 then
      Exit;

     if DBGridEh.UseMultiTitle then
     begin
      try
       CreateMultiTitleMatrix(DBGridEh, ColumnsList, FPTitleExpArr, ListOfHeadTreeNodeList);
       //输出除最后一行表头的内容
       for k := ListOfHeadTreeNodeList.Count - 1 downto 1 do
       begin
        for i := 0 to ColumnsList.Count - 1 do
        begin
         if THeadTreeNode(TList(ListOfHeadTreeNodeList.Items[k]).Items[i]) <> nil then
         begin
          CalcSpan(ColumnsList, ListOfHeadTreeNodeList, k, i, ColSpan, RowSpan);
          str1:=THeadTreeNode(TList(ListOfHeadTreeNodeList.Items[k]).Items[i]).Text;
          //=====================================
          L := Length(str1);
          CXlsLabel[1] := 8 + L;
          CXlsLabel[2] := FRow;
          CXlsLabel[3] := FCol;
          CXlsLabel[5] := L;
          StreamWriteWordArray(Stream, CXlsLabel);
          StreamWriteAnsiString(Stream, str1);
          if FCol = ExpCols.Count - 1 then
          begin
           Inc(FRow);
           FCol := 0;
          end
          else
           FCol:=FCol+ColSpan;
          //=====================================
         end;
        end;
       end;
       FRow := ListOfHeadTreeNodeList.Count - 1;
       FCol :=0;
       //输出最后一行表头
       for i := 0 to ColumnsList.Count - 1 do
       begin
        if THeadTreeNode(TList(ListOfHeadTreeNodeList.Items[0]).Items[i]) <> nil then
        begin
         CalcSpan(ColumnsList, ListOfHeadTreeNodeList, 0, i, ColSpan, RowSpan);
         str1:=THeadTreeNode(TList(ListOfHeadTreeNodeList.Items[0]).Items[i]).Text;
         //WriteStringCell(str1);
         //==================================
         L := Length(str1);
         CXlsLabel[1] := 8 + L;
         CXlsLabel[2] := FRow;
         CXlsLabel[3] := FCol;
         CXlsLabel[5] := L*ColSpan;
         StreamWriteWordArray(Stream, CXlsLabel);
         StreamWriteAnsiString(Stream, str1);
         if FCol = ExpCols.Count - 1 then
         begin
          Inc(FRow);
          FCol := 0;
         end
         else
          FCol:=FCol+ColSpan;
         //==================================
        end
        else
        begin
         Inc(FCol);//单云格进一
        end;
       end;
       FRow:=ListOfHeadTreeNodeList.Count;
       FCol:=0;
      finally
       for i := 0 to ListOfHeadTreeNodeList.Count - 1 do
        TList(ListOfHeadTreeNodeList.Items[i]).Free;
       ListOfHeadTreeNodeList.Free;
      end;
     end
     else  //不使用多表头
     begin
      for i := 0 to ColumnsList.Count - 1 do
      begin
       WriteStringCell(ColumnsList[i].Title.Caption);
      end;
     end;
    end;
    //------------------------------------------------------------------

  • 相关阅读:
    vue项目搭建
    iview在ie9及以上的兼容问题解决方案
    中山大学校队内部选拔赛试题试题2【New Year Gift】--------2015年2月8日
    中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
    ZOJ2812------2015年2月4日
    C++STL泛型编程基础知识讲解--------2015年2月3日
    中山大学校队选拔赛第一章题4【简单数迷Simple Kakuro】-------2015年1月28日
    UVALive
    UVA11375【火柴拼数Matches】-------2015年1月27日
    递推关系的运用加简单DP【UVA11137Ingenuous Cubrency】-------2015年1月27日
  • 原文地址:https://www.cnblogs.com/beeone/p/1792342.html
Copyright © 2011-2022 走看看