永发信息网

delphi如何从数据库中按excel模版格式导出到excel

答案:3  悬赏:0  手机版
解决时间 2021-03-29 05:30
delphi如何从数据库中按excel模版格式导出到excel
最佳答案
你可以手动写一个导出函数,以后直接使用它。
//===================================================
//===================ADOQ数据导出到Excel=========
//===================================================
Procedure ADOQOutPutToExcel(MyADOQ:TADOQuery;MyDBG:TDBGrid;SaveFileName:String;Gauge:TGauge);
Var Excel,WorkBook:OleVariant;
i,j,row:integer;
Begin
//检测计算机中是否安装了Excel,是否可以建立对象
Try
Excel:=CreateOleObject('Excel.Application');
Except
Begin
Application.MessageBox('你的计算机中没有安装Excel,无法导出到Excel!','警告',0);
Exit;
end;
end;
//====将数据写入到Excel
WorkBook:=Excel.WorkBooks.Add;//建立工作簿
//==写入标题
Gauge.MaxValue :=MyDBG.Columns.Count-1;
Gauge.Progress :=0;
For i:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.Cells[1,i+1].value:=MyDBG.Columns.Items[i].Title.Caption;
Gauge.Progress :=i;
End;
Gauge.Progress :=0;
//==写入记录
Row:=2;
MyADOQ.First;
Gauge.MinValue :=0;
Gauge.MaxValue :=MyADOQ.RecordCount;
Gauge.Progress :=0;
For i:=0 to MyADOQ.RecordCount-1 DO
Begin
For j:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.cells[row,j+1].value:=MyDBG.Fields[j].Value;
end;
Inc(Row);
Gauge.Progress :=Gauge.Progress +1;
MyADOQ.Next;
End;
//==保存到文件
Try
Begin
Excel.ActiveWorkBook.SaveAs(SaveFileName);
Excel:=UnAssigned;
WorkBook.Close;
Application.MessageBox(PChar('模板创建成功!模板已成功保存到:'+#13 +SaveFileName+'.xls'),'操作提示',0);
End;
Except
Begin
Application.MessageBox('模板创建失败,指定文件可能正在使用当中,请关闭文件再试一次!','操作提示',0);
Exit;
End;
End;
End;
调用时:
Var ExcelFileName:String;
begin
SaveDialog1.Filter:='数据表|*.xls|';
If SaveDialog1.Execute then
Begin
ExcelFileName:=SaveDialog1.FileName;
ADOQOutPutToExcel(ADOQ_yfd,DBG_yfd,ExcelFileName,Gauge);
End;
全部回答
关于操纵EXCEL增加行并保持设定好的格式的问题,我有个解决办法,不知道是不是符合你的意思:其实我只要事先在模板文件中将两行的格式设定好就行了,比如我把第7和第8行的底色设成灰色,你在DELPHI中就可以通过在第8行前插入行就OK了。var ExcelApp, MyWorkBook, sheet: OLEVariant;
f1: string;
i: integer;
begin ExcelApp := createoleobject('excel.application');
ExcelApp.visible := false;
ExcelApp.ScreenUpdating := false;
f1 := 'c:\模板文件.xls';
ExcelApp.WorkBooks.Open(f1);
MyWorkBook := ExcelApp.workbooks[1];
sheet := MyWorkBook.worksheets[1]; for i := 0 to table1.RecordCount - 1 do
begin
sheet.rows[8 + i].insert;
sheet.cells[8 + i, 1] := 'A';
sheet.cells[8 + i, 2] := 'B'; table1.next;
end; sheet.rows[7].delete; //删除仅为提供格式样板的多余空行
sheet.rows[7 + i].delete;...... //以下省略end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
念六字大明咒好处
猪八戒为什么能当元帅,这一能力诸天神佛无人
英语学霸,求助~急!
每天平板支撑一分钟一个月有什么效果
某酒厂生产ab2种品牌的黄酒,每天两种酒共生
东京凯悦酒店到六本木之丘怎么走
2015年适合社区和谐的新春对联
比较长江三角洲与松嫩平原的区域优劣势
某车在30min内行驶了20km的路程,求该车的速
小朵的木耳10克是多少
纳粹的新纳粹
无证养狗伤人怎么处置
贵阳干洗店设备如何选择
营发村地址好找么,我有些事要过去,
怎么建立一个让电脑(WIN7)立刻待机的批处理
推荐资讯
什么肥能使花卉枝繁叶茂
控制论发展历史
求speak、tell、say、ask、talk的用法,句型
最近慢慢的不怎么和男朋友微信聊天了而且话还
家用取暖生物质颗粒炉好还是煤炉好
在外地上班的中年女友,因我感觉到她不爱联系
在b站能搬运优土承包的番剧吗?
按照因果轮回来讲:父母对于儿女来说,前世是
1米78的曹芳,能叩开CBA大门吗
有没有人有高皓正的《奋身》的歌词啊????
她说!终于休息了!我怎么回答?
泪之腕轮传说 尤特娜英雄战记怎么拿到转职证
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?