这是我在网上找的一个方法unit DBGRIDexel;interface
    uses ComObj,DBGrids,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;    function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog;SaveFileName: string): boolean;implementation
 function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog ;SaveFileName: string): boolean;
var
c,r,i,j: integer;
app: Olevariant;
TempFileName, ResultFileName: string;
begin
try
  result := True;
  app := CreateOLEObject('Excel.application');
   except
      Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
      result := False;
      exit;
     end;  SaveDialog.DefaultExt := '.xls';
  SaveDialog.FileName:=SaveFileName;  if SaveDialog.Execute then
  TempFileName := SaveDialog.FileName
  else
  Exit;  app.Workbooks.add;
  app.Visible := false;
  Screen.Cursor := crHourGlass;  DBGrid.DataSource.DataSet.First;
  c:=DBGrid.DataSource.DataSet.FieldCount;
  r:=DBGrid.DataSource.DataSet.RecordCount;  Application.ProcessMessages;  for i:=0 to c-1 do
  begin
  app.ActiveSheet.Columns[i+1].ColumnWidth:=10;//设置格宽度
  app.cells(1,1+i):=DBGrid.DataSource.DataSet.Fields[i].DisplayLabel;
  end;  for j := 1 to r do
  begin
  for i := 0 to c - 1 do
  begin
  app.cells[j+1,3].numberformatlocal:='@';//设置成文本
  app.cells(j+1,1+i):=DBGrid.DataSource.DataSet.Fields[i].AsString;
  end;
  DBGrid.DataSource.DataSet.Next;
  end;  ResultFileName := TempFileName;  if ResultFileName = '' then
  ResultFileName := '数据导出';  if FileExists(TempFileName) then
  DeleteFile(TempFileName);  app.Activeworkbook.saveas(TempFileName);
  app.Activeworkbook.close(false);
  app.quit;
  app := unassigned;
end;end.导出文件是可以,但是存在3个问题。不知道怎么解决。
1. 导出的时候无法选择文件类型。SaveDialog打开时,没有文件类型的选项。都是空。
2.导出文件的时候一直显示为正在导出的状体。好像有什么都懂没结束一样。鼠标图标显示漏斗状,但是做其它操作时可以的。没有什么影响,就是好像一直在导出。但是实际已经完成了。还可以吧导出文件给打开。
3.导出文件的表头。全是数据库的字段名,而不是DBGrid的列名。

解决方案 »

  1.   

    http://download.csdn.net/detail/lch0422/6256389
      

  2.   

    分 主要是解决 OPENOFFICE 的问题。XE或以上版本
      

  3.   

    分 主要是解决 OPENOFFICE 的问题。XE或以上版本
    使用的是D7  没用XE
      

  4.   

    35行,Screen.Cursor := crHourGlass;
    不要了
      

  5.   

    谢谢。
    刚才在别的帖子找到一个很好的类,但是还是有些问题。能请问下嘛?已经给你留言了
    估计跟我找的类一样。这个类不能处理复杂的逻辑,只是速度很快。。
    但我导出来用OPENOFFICE居然中文乱码,          WPS、MS 是正常的。
    在研究中