DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: maple909
今日帖子: 10
在线用户: 5
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 happyfox (happyfox) ★☆☆☆☆ -
普通会员
2004/1/6 18:37:48
标题:
我整理的数据导出到Excel的代码,请高手给讲评一下,谢谢 . 浏览:2504
加入我的收藏
楼主: 前段时间由于程序中有类似的功能,我在网上找到了不少相关的资料,结合我自己的使用情况,总结出这两种比较简单的方法,有关代码借签部分网友的作品,在此表示感谢。
(一)利用Server面板上的三个Excel相关的组件excelApplication,Excelworksheet,excelworkbook,使用这些控件与Excel程序建立联系,同时此面板上还提供了操作Office的控件,具体使用方法,还请对此熟悉的高手提供一些资料.
具体操作代码如下:
procedure TJspdcxform.BitBtn1Click(Sender: TObject);//导出按纽
var  i,row:integer; 
begin
if SaveDialog1.Execute then//此处还用了一个保存对话框
begin
 Screen.Cursor:=crHourGlass;  //设置鼠标形状为沙漏状
 ExcelApplication1.Connect;//和excel连接如果没有Excel程序可能要出错
 ExcelApplication1.Workbooks.Add(Null,0);//为excel添加工作簿
 ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
 ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet); 
 if not Query1.Active then 
 begin
   QUERY1.Open;
 end;
 for i:=0 to QUERY1.Fields.Count-1 do     ExcelWorkSheet1.Cells.Item[1,i+1]:=dbgrid1.Columns.Items[i].Title.Caption;//把DBGRID的各字段名写入Excel第一行
row:=2;                           
//或用QUERY1.Fields[i].FieldName代替DBGRID1.columns.Items[i].Title.Caption那句
 while not QUERY1.Eof do 
 begin
   for i:=0 to QUERY1.Fields.Count-1 do
   begin     ExcelWorkSheet1.Cells.Item[row,i+1]:=QUERY1.Fields[i].AsString;
   end;//把查询结果写入到电子表格中
   row:=row+1; 
   QUERY1.Next; 
 end;
 ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName); 
 ExcelWorkBook1.Close(false);
  ExcelApplication1.Disconnect;
  ExcelApplication1.Quit;
  Screen.Cursor:=crDefault;
  Application.MessageBox('成功保存文件!','提示',0);
end;
end;

(二)利用Ole创建Excel对象,然后再进行导出
procedure Tform1.SpeedButton5Click(sender:Tobject);
var Excel,Wrkbook,WrkSheet:olevariant;
I,row:integer;
Begin

Try
  Excel:=CreateOleObjcet(‘Excel.Application’);
Except
  If Application.MessageBox(‘你的机器没安装Excel,是否继续志出?’,‘注意’,Mb_OkCancel)=Id_no  then  Exit;
End;

If  SaveDialog1.Execute then
Begin
  WrkBook:=Excel.WorkBooks.Add;//建立工作簿
  Row:=1;
  SheetCout:=1;
While not Query1.Eof do 
Begin
  If Row=1 then for I:=0 to QUERY1.Fields.Count-1 do 
Excel.workbook.worksheets[SheetCount].Cell[Row,I+1].value:= dbgrid1.Columns.Items[i].Title.Caption;//把标题写入EXCEL
Inc(Row);
For I:=0 to QUERY1.Fields.Count-1 do
Excel.workbook.worksheets[SheetCount].Cell[Row,I+1].value:=query1.fields[i].asstring;
If Row>50000 then
Begin
  SheetCount:=SheetCount+1;
  Row:=1;
End;
Query1.Next;
End; 
Excel.Activeworkbook.SaveAs(saveDialog1.FileName);
WrkBook.Close;
Excel.quit;
Excel:=Unassigned;
ShowMessage(‘系统已经导出,请到’+SaveDialog1.FileName+’里查看’);
End;
由于对Excel的控件工作机理不是太明白,所以无法做出具体详细的注释,请高手看完之后能对这些代码做些讲评,也让我多学些。
----------------------------------------------
无论你是狮子还是羚羊,为了生存,你别无选择,你必须跑!
作者:
男 happyfox (happyfox) ★☆☆☆☆ -
普通会员
2004/1/7 13:32:09
1楼: 我花了很长时间,各位老大还不现身,伤心
----------------------------------------------
无论你是狮子还是羚羊,为了生存,你别无选择,你必须跑!
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/1/16 21:18:29
2楼: 过年了 老大 都要休息了 还不明白吗 等春暖花开 在来了!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 gsl (天涯) ★☆☆☆☆ -
盒子活跃会员
2004/2/27 14:47:41
3楼: happyfox  兄,
   做得不错。我用你的代码,一下子就出来了
非常谢谢,我的QQ是 30032561,你的是多少??
我们可以结识一下
----------------------------------------------
-
作者:
男 xiuluoqq (xiuluoqq) ★☆☆☆☆ -
盒子活跃会员
2004/2/27 15:10:18
4楼: 不错,正在测试中。。。。。。。。。。。。。
----------------------------------------------
卑鄙,是卑鄙者的通行证;高尚,是高尚者的墓志铭!
作者:
男 llf026 (llf026) ★☆☆☆☆ -
盒子活跃会员
2004/2/27 16:00:47
5楼: 关注!
----------------------------------------------
-
作者:
男 waterstone (waterstone) ★☆☆☆☆ -
盒子活跃会员
2004/2/29 1:22:24
6楼: 已经收藏!

----------------------------------------------
我来自农村广阔的田野我的每一个动作都很夸张http://waterstone.51r.com
作者:
男 pangyuanfeng (老庞) ★☆☆☆☆ -
盒子活跃会员
2004/3/1 15:59:17
7楼: 非常感谢,好好。另外在请问各位高手,如何把excel中的东西,倒入到数据库中。再次先谢谢各位了。
----------------------------------------------
我喜欢delphi,我拥护delphi。
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/3/1 16:15:40
8楼: 颠倒一下不就得了,不会这么死脑筋吧!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 lsx1982 (prince_lsx) ★☆☆☆☆ -
盒子活跃会员
2004/3/1 16:21:54
8楼: 有些事要自己亲自查资料
我也搞了很久才搞懂!
----------------------------------------------
I love the game!
作者:
女 junfei (pp) ★☆☆☆☆ -
普通会员
2004/3/13 11:50:42
9楼: 这段代码对系统有没有什么要求阿?
 我在xp+office2003下编译完成没问题,但是移植到98+office2000中时提示:interface not support是怎么回事啊?
----------------------------------------------
-
作者:
男 wgyjacky (wgyjacky) ★☆☆☆☆ -
盒子活跃会员
2004/3/19 11:35:05
10楼: 唔错,不过禁写循环好像比较慢,数据量大的话就很明显,有没有一种方法加快速度啊?小弟很想知道,
我知道PB里导出EXCEL是很快的,比上面两个快很多倍!请高手指点
----------------------------------------------
-我喜欢DELPHI,但我不会用.
作者:
男 happyfox (happyfox) ★☆☆☆☆ -
普通会员
2004/3/29 22:33:38
11楼: 天涯老兄我的QQ39610738,最近忙考试上网的时间少了过了五月就可以经常上网了
----------------------------------------------
无论你是狮子还是羚羊,为了生存,你别无选择,你必须跑!
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS