王朝网络
分享
 
 
 

增强型DBGrid2Excel-- 支持标题粗体,对齐格式与避免科学计算法

王朝delphi·作者佚名  2006-01-09
宽屏版  字体: |||超大  

unit dbgrid2excel;

{

功能描述:把DBGrid输出到Excel表格(支持多Sheet)

调用格式:DBGridToExcel([DBGrid1, DBGrid2]);

对于数字用AsString, 其它可能含有格式的文本用DisplayText

长数字字符 的Tag C_LongNumber_FieldTag = 9; 避免科学计算格式,如身份证号的显示

自动采用对齐属性, 标题粗体

}

interface

uses

classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,

Db,DBGrids,forms,ComObj,Variants;

const

C_LongNumber_FieldTag = 9;

//这些不可运算文字可能含有格式

function MayHasFormatText(const AFieldType:TFieldType):Boolean;

procedure DBGridToExcel(Args: array of const);

implementation

function MayHasFormatText(const AFieldType:TFieldType):Boolean;

begin

Result := AFieldType in

[ftBoolean, ftDate, ftTime, ftDateTime, ftTimeStamp,

ftString, ftFixedChar, ftWideString] ;

end;

{

功能描述:把DBGrid输出到Excel表格(支持多Sheet)

调用格式:DBGridToExcel([DBGrid1, DBGrid2]);

}

procedure DBGridToExcel(Args: array of const);

const

xlHAlignCenter = -4108;

xlHAlignLeft = -4131;

xlHAlignRight = -4152;

var

iCount, jCount: Integer;

XLApp: Variant;

Sheet: Variant;

I: Integer;

BK : TBookMark;

DataSet:TDataSet;

Col : TColumn;

CellStr : string;

GAL :TAlignment;

EAL : Integer;

begin

Screen.Cursor := crHourGlass;

if not VarIsEmpty(XLApp) then

begin

XLApp.DisplayAlerts := False;

XLApp.Quit;

VarClear(XLApp);

end;

try

XLApp := CreateOleObject('Excel.Application');

except

Screen.Cursor := crDefault;

Exit;

end;

XLApp.WorkBooks.Add;

XLApp.SheetsInNewWorkbook := High(Args) + 1;

for I := Low(Args) to High(Args) do

begin

XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;

Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];

if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then

begin

Screen.Cursor := crDefault;

Exit;

end;

DataSet := TDBGrid(Args[I].VObject).DataSource.DataSet;

DataSet.DisableControls;

BK := DataSet.GetBookmark();

DataSet.First;

//标题

for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do

begin

Col := TDBGrid(Args[I].VObject).Columns.Items[iCount];

Sheet.Cells[1, iCount + 1] := Col.Title.Caption;

Sheet.Cells[1, iCount + 1].Font.Bold :=True ;//粗体

GAL := Col.Alignment;

if GAL = taLeftJustify then

EAL := xlHAlignLeft

else if GAL = taCenter then

EAL := xlHAlignCenter

else EAL := xlHAlignRight;

//列数据对齐格式

Sheet.Columns[iCount + 1].HorizontalAlignment := EAL ;

//列标题对齐格式

Sheet.Cells[1, iCount + 1].HorizontalAlignment := xlHAlignCenter;

//自定义格式, 避免把长数字字符转换为科学记数法

if Col.Field.Tag=C_LongNumber_FieldTag then

Sheet.Columns[iCount + 1].NumberFormatLocal :='@';

end;

//数据

jCount := 1;

while not DataSet.Eof do

begin

for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do

begin

Col := TDBGrid(Args[I].VObject).Columns.Items[iCount];

if MayHasFormatText(Col.Field.DataType) then

CellStr := Col.Field.DisplayText

else

CellStr:= Col.Field.AsString;

Sheet.Cells[jCount + 1, iCount + 1] := CellStr;

end;

Inc(jCount);

DataSet.Next;

Application.ProcessMessages;

end;

DataSet.GotoBookmark(BK);

DataSet.FreeBookmark(BK);

DataSet.EnableControls;

XlApp.Visible := True; //用户关掉, 就可以关掉内存中的Excel试验通过2005.2.5

Sheet := unAssigned; //可以不要

end;

Screen.Cursor := crDefault;

end;

end.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有