CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

请问如何实现数据表中的记录输出为Excel文件,急用,谢谢!

楼主kingbus(利剑)2004-08-01 17:02:05 在 Delphi / VCL组件开发及应用 提问

请问如何实现数据表中的记录输出为Excel文件,急用,谢谢! 问题点数:30、回复次数:7Top

1 楼suiyuxing(秋水)回复于 2004-08-01 17:29:27 得分 0

有一个控件的。好像是ExGrid中的吧,有一个控件可以的。上网找一找看,我忘了!!!Top

2 楼flayyao(姚俊)回复于 2004-08-01 18:54:49 得分 0

这是我自己一个控件中的源代码,你可以看看,主要是通过ole控制  
  procedure   Tmydbgrid.chooseexcel(sender:   tobject);  
  var  
      msexcel,   sheet:   OleVariant;  
      count,   i:   integer;   //fieldnum,  
      Grid:   twwdbgrid;  
  begin  
      grid   :=   self;  
      if   grid.DataSource.DataSet.Active   =   false   then  
      begin  
          prompt(mtinformation,   '数据为空!');  
          exit;  
      end;  
      try  
          msexcel   :=   CreateOleObject('excel.Application');  
          msexcel.visible   :=   true;  
      except  
          prompt(mtinformation,   '不能启动Microsoft   Excel,操作失败!');  
          exit;  
      end;  
      count   :=   2;  
      msexcel.Workbooks.Add(emptyparam);  
      msexcel.Workbooks[1].WorkSheets[1].Name   :=   'Excel';  
      sheet   :=   msexcel.Workbooks[1].WorkSheets['Excel'];  
      for   i   :=   1   to   grid.FieldCount   do  
      begin  
          if   grid.UseTFields   then  
              sheet.cells[1,   i]   :=   grid.datasource.dataset.fields[i   -   1].DisplayLabel  
          else  
              sheet.cells[1,   i]   :=   grid.Columns[i   -   1].DisplayLabel;  
      end;  
      try  
          grid.DataSource.DataSet.DisableControls;  
          grid.DataSource.DataSet.First;  
          while   not   grid.DataSource.DataSet.Eof   do  
          begin  
              for   i   :=   1   to   grid.FieldCount   do  
                  sheet.cells[count,   i]   :=   grid.Fields[i   -   1].asstring;  
              inc(count);  
              grid.DataSource.DataSet.Next;  
          end;  
          grid.DataSource.DataSet.First;  
      finally  
          grid.DataSource.DataSet.EnableControls;  
      end;  
  end;  
  Top

3 楼SuQingQuan(边城浪子)回复于 2004-08-01 21:39:46 得分 10

有可以实现合并单元格或是其他一系列Execl常规操作的吗?不然的话,也可以不用ole来做啊。Top

4 楼SuQingQuan(边城浪子)回复于 2004-08-01 21:41:31 得分 0

try  
              assignfile(F,   SaveDialog1.FileName);  
              if   FileExists(SaveDialog1.FileName)   then  
                  if   application.MessageBox('文件已存在,是否重写?',   '提示',   MB_YESNO)   =   IDYES   then  
                      rewrite(F)  
                  else  
                      exit  
              else  
                  rewrite(F);  
              //取标题    
              with   DBGrid1   do  
                  for   i   :=   0   to   Columns.Count   -   1   do  
                      if   DBGrid1.Columns[i].Visible   then  
                          sLabel   :=   sLabel   +   Columns[i].title.Caption+#9;  
              //写文件  
              write(F,   #9#9);  
              write(F,   sTitle   +   #13#10);  
              write(F,   sLabel   +   #13#10);  
              //   取数据  
              with   DBGrid1.DataSource.DataSet   do   begin  
                  SavePlace   :=   GetBookmark;  
                  DisableControls;  
                  try  
                      First;  
                      while   not   EOF   do   begin  
                          {   Process   each   record   here   }  
                          sData   :=   '';  
                          for   i   :=   0   to   DBGrid1.Columns.Count   -   1   do   begin  
                              //如列不可见,不取    
                              if   DBGrid1.Columns[i].Visible   then   begin  
                                  if   option=1   then  
                                      sData   :=   sData   +   TField(DBGrid1.Columns[i].field).text+#9  
                                  else  
                                      sData   :=   sData   +   TField(DBGrid1.Columns[i].field).AsString+#9;  
                              end;  
                          end;  
                                //写文件  
                          write(F,   sData   +   #13#10);  
                          Next;  
                      end;  
                  finally  
                      EnableControls;  
                  end;  
                  GotoBookmark(SavePlace);  
                  FreeBookmark(SavePlace);  
              end;   //end   of   with  
          except  
              on   EInOutError   do  
                  application.MessageBox('写文件错误',   '错误提示',   MB_OK);  
          end;  
          closefile(F);Top

5 楼SuQingQuan(边城浪子)回复于 2004-08-01 21:41:58 得分 0

奉上的是一个最土的办法,但也很快速。Top

6 楼woding(郭大路)回复于 2004-08-01 22:14:39 得分 0

收藏.........Top

7 楼netcrawller(放弃绑定-不用第三方控件)回复于 2004-08-02 09:29:47 得分 20

同意:SuQingQuan(边城浪子)    
   
  还有一个方法是先存成CSV(逗号分隔文本文件)这样也可以用Excel打开,不过后缀一定要是  
  CSV,如果非要存成XLS的话那就再转一下吧(CSV->XLS),给个我写的Function你.  
   
  function   SaveCSV2XLS(const   FileName:   string):   string;  
  var  
          app:   OleVariant;  
          xlsFile:   string;  
  begin  
          xlsFile   :=   ChangeFileExt(FileName,   '.xls');  
          app   :=   CreateOleObject('Excel.Application');  
          if   FileExists(xlsFile)   then   SysUtils.DeleteFile(xlsFile);  
   
          app.Workbooks.Open(FileName);  
          app.Workbooks[1].SaveAs(xlsFile,   -4143,   '',   '',   false,   false);  
          app.Workbooks[1].Close;  
          app   :=   Unassigned;  
          SysUtils.DeleteFile(FileName);  
          result   :=   ChangeFileExt(FileName,   '.xls');  
  end;Top

相关问题

  • 如何将数据表转换为Excel输出,请各位大哥帮忙了
  • 请问如何把数据表的内容按固定格式的表格输出给Word和Excel?
  • 如何将excel中的数据表转换成Access数据表?
  • Excel表格怎样转成数据表?
  • 急用!!!!!!1有关SQL SERVER的数据表->HTML中的表格
  • 急用:用adodc怎样向数据表插入数据??
  • 紧急:用sql server如何将dbf数据表导入到Oracle库中??
  • 怎样用DAO或ADO访问EXCEL数据表?
  • PHP如何读取ACCESS和EXCEL数据表?
  • 如何转化数据表为EXCEL文件

关键词

  • grid
  • 文件
  • excel
  • 控件
  • msexcel
  • sdata
  • saveplace
  • slabel
  • dbgrid
  • datasource

得分解答快速导航

  • 帖主:kingbus
  • SuQingQuan
  • netcrawller

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo