多表头的DBGridEH导出到Excel中
2008-02-23 07:23:52来源:互联网 阅读 ()
语 种:简体中文
编辑器:Delphi7
平 台:Win9x,Win2k/NT
作品源代码: -
软件或演示: -
代码大小: -
软件大小: -
无图片
把自己的解决法子说一下,虽然解决的不是很完美,缺少单元格合并和字体设置。
我重写了单元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;
//------------------------------------------------------------------
上一篇: DELPHI高级编程实例精解
下一篇: DataCollector 第四期资料集 [共享软件专题]
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:第三方控件安装方法说明文档
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash