问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi 中把 dbgrid 中的数据 保存到excel 表中

发布网友 发布时间:2022-11-19 19:51

我来回答

1个回答

热心网友 时间:2023-10-17 04:47

1、很重要的一点,,要先在delphi中引入Excel:
“Project”——“Import Tpye Library”,在弹出的对话框中点击“Add”。找到你安装Excel的盘,,默认的安装路径:“C:\Program Files\Microsoft Office\OFFICE11”.安装的版本如果不同的话“OFFICE11”文件名会不一样。然后你可以找到“XL5CHS32.OLB”和“XL5EN32.OLB”文件。这两个文件你可以任选一个。XL5CHS32.OLB是中文版Excel,XL5EN32.OLB是英文版的Excel。选中后回到了Import Tpye Library对话框,在此对话框中选择“create unit”.这个新创建的单元会放在你当前文件存放的同一个目录下。记住不能删。
2、在你放按钮的窗体中添加一个ExcelApplication1控件,它放在Servers栏中。
3、继续上一步,在窗体的代码implementation部分添加如下代码:
uses dm,tools,Excel_TLB,comobj;
{$R *.dfm}

Function DetailToExcel(xl_file:string;grid:Tdbgrid;T1:string='';T2:string='';T3:string=''):integer;
var xlApp:Variant;
i,j:integer;
irow,icol:integer;
TitleLines:integer;
Titles:array [1..3] of string;
begin
if (not grid.DataSource.DataSet.Active) or (grid.DataSource.DataSet.RecordCount=0) then exit;

Try
xlapp:=createoleobject('Excel.application');
xlapp.workbooks.Add(-4167);
xlapp.visible:=true;
Except
showmessage('未安装Microsoft Excel 2000!请安装!');
exit
end;

//计算标题:
TitleLines:=0;
Titles[1]:=T1;
Titles[2]:=T2;
Titles[3]:=T3;

if T1<>'' then TitleLines:=1;
if T2<>'' then TitleLines:=2;
if T3<>'' then TitleLines:=3;

//填充列标题;
irow:=grid.DataSource.DataSet.RecordCount;
icol:=0;
for i:=0 to grid.Columns.Count-1 do
begin
if grid.Columns[i].Visible then
begin
inc(icol);
xlapp.cells[TitleLines+1,Icol]:=grid.Columns[i].Title.Caption;
end;
end;

//填充标题;
For i:=1 to TitleLines do
begin
xlapp.activesheet.cells[i,1]:=Titles[i];
xlapp.activesheet.range['A'+IntToStr(i)+':'+chr(64+icol)+IntToStr(i)].select;
xlapp.selection.HorizontalAlignment := xlCenter;
xlapp.selection.VerticalAlignment := xlCenter;
xlapp.selection.MergeCells := True;

if i=1 then
begin
xlapp.selection.RowHeight:=26;
xlapp.selection.Font.size:=18;
end
else
begin
xlapp.selection.RowHeight:=20;
xlapp.selection.Font.size:=12;
end;
end;

//设置表格线;
xlapp.activesheet.range['A'+IntTostr(TitleLines+1)+':'+chr(64+icol)+Inttostr(irow+TitleLines+1)].select;
xlapp.selection.Borders[xlEdgeBottom].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgetop].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgeright].linestyle:=xlContinuous;
xlapp.selection.Borders[xlEdgeLeft].linestyle:=xlContinuous;
xlapp.selection.Borders[xlInsideVertical].linestyle:=xlContinuous;
xlapp.selection.Borders[xlInsideHorizontal].linestyle:=xlContinuous;

//填充内容;
grid.DataSource.DataSet.First;
i:=TitleLines+2;
while not grid.DataSource.DataSet.Eof do
begin
icol:=0;
for j:=1 to grid.Columns.Count do
begin
if grid.Columns[j-1].Visible then
begin
inc(icol);
xlapp.cells[i,icol]:=grid.Columns[j-1].Field.DisplayText;
end;
end;
grid.DataSource.DataSet.Next;
inc(i);
end;

For i:=1 to icol do
begin
xlapp.activesheet.Columns[i].select;
xlapp.activesheet.Columns[i].EntireColumn.AutoFit;
end;

xlapp.activesheet.cells[1,1].select;

if xl_File<>'' then
xlapp.workbooks[1].SaveAs(xl_file);

result:=0;
end;
4、最后,按钮单击事件如下代码:
procere TDayDutyForm.Button3Click(Sender: TObject);
begin
if DBGrid1.DataSource.DataSet.RecordCount=0 then
ShowMessage('没有内容!')
else
DetailToExcel(ExtractFilePath(application.ExeName)+'DayDuty.xls',DBgrid1,'日统计');
end;
/*DayDuty.xls是你需要的Excel的文件名,日统计是你需要的Excel的标题*/

以上内容是老师教的,很好用。希望你能用得成功哈。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 有谁能给个delphi Excel(中文表头)导入数据到DbGridEh中的例子... delphi 中怎样可以把 excel 的数据在 DBGrid 里面显示 我最近在学习DELPHI,现在遇到一个问题,就是怎么样读取excel中的... Delphi XE2 如何导入Excel文件资料到grid表 职场新人必学的五款办公软件 可转债万0.11哪个证券公司那么低? 现在书中草船借箭会不会误导孩子们以为这是历史? 移动智校园5元包月是干啥的 假如诗歌 假如我是一棵树诗歌 眼角下垂整形手术方法介绍 眼部整形手术都有哪几种方法? 如何增加步数微信步数的算法是怎样的? 游戏挂机会影响微信运动步数吗 燕子一般在什么人家做窝(燕子为什么喜欢在家里做窝) 苹果手表拟我表情表盘怎么固定一个表情 周公解梦,梦见考试怎么办? 我想问一下怎么是踩空间啊?我去别人空间看了留言了..但是那人说我这不... 新家正在装修,户型较大有打算今后三代人同住,在燃气热水器选择这部分... 万家乐Cⅹw300乚1`2和Cⅹw240ⅹ52C的区别 在delphi中将DBGRID中显示的将数据信息导入到Excel表中? ...里设置信任的游戏软件,点描述文件,空白怎么回事 如何判断LED筒灯的质量 什么是low-e玻璃?有何作用。原理是什么 蜡烛托的作用 蜡烛托是什么意思 5.20和5.21发红包代表什么意思呢 QQ音乐图标为什么不能点亮 都说蜂蜜有营养,天天吃蜂蜜会长胖么? 我需要计量氧气流量能不能用氩气的减压表计量啊? 2020年本科毕业生人数 应届毕业生人数 冬装红色高跟鞋怎么搭配 10万伏的高压电对地的电压是10万伏吗 十万伏高压线离民房的距离多远才安全 村开头的诗句有名 村字开头的古诗句 用什么泡脚可以去脸上斑点 李起光ONE新专辑百度云 谁有 万芳-2005 One新歌+精选2CD 音乐专辑百度网盘资源