首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi将当前dbgrid中数据导出到excel中解决方法

2012-02-12 
delphi将当前dbgrid中数据导出到excel中请问能不能将dbgrid中的内容导出来,并且插入到已有表的固定位置?比

delphi将当前dbgrid中数据导出到excel中
请问能不能将dbgrid中的内容导出来,并且插入到已有表的固定位置?比如说,将内容插到先有一excel的从A7 开始往下的位置。A7 往上是我在excel 中做的一些东西,不能从dbgrid 中取出来,并且不成行成列的数据。

[解决办法]

Delphi(Pascal) code
procedure DataSetToExcel(MydataSet:tdataset);var    FileHandle : Integer;    tt:string;    x,y:integer;    SaveDialog1:TSaveDialog;    xlapp, xlsheet: variant;   begin      try        xlapp := createoleobject('excel.application');      except        showmessage('您的系统没有安装MS  EXCEL!');        exit;      end;     if  MydataSet.Active=false     then exit;     if  MydataSet.RecordCount<1   then exit ;     SaveDialog1:=TSaveDialog.Create(MydataSet.Owner);     SaveDialog1.FileName:='';     SaveDialog1.Filter:='Excel files (*.xls) | *.xls';     SaveDialog1.DefaultExt:='xls';     SaveDialog1.Execute;     tt:=SaveDialog1.FileName;     if tt='' then exit;    if   Fileexists(tt)   then    begin    if   MessageDLG('文件已存在,确认覆盖?',mtWarning,[mbOK,mbCancel],0)   =   mrOk   then    begin     Deletefile(tt);     Screen.Cursor := crHourGlass;     FileHandle := Xls_Create(tt);     Xls_SetFormat(FileHandle,'yyyy-mm-dd hh:mm:ss');     with MydataSet do            begin                Open;                    DisableControls;                First;                for y:= 0 to FieldCount-1 do                        Xls_SetString(FileHandle, 0, y,Fields[y].FieldName);                for x:=0 to RecordCount-1 do                    begin                        for y:=0 to FieldCount-1 do                            begin                                if FieldTypeNames[Fields[y].datatype]='WideString'  then                                    Xls_SetString(FileHandle, x+1, y,Fields[y].AsString)                                else if FieldTypeNames[Fields[y].datatype]='LargeInt'  then                                    Xls_SetInteger(FileHandle, x+1, y,Fields[y].Asinteger)                                else if FieldTypeNames[Fields[y].datatype]='Integer'  then                                    Xls_SetInteger(FileHandle, x+1, y,Fields[y].Asinteger)                                else if FieldTypeNames[Fields[y].datatype]='BCD'   then                                    Xls_SetDouble(FileHandle, x+1, y,Fields[y].Asfloat)                                else  Xls_SetString(FileHandle, x+1, y,Fields[y].AsString);                                Application.ProcessMessages;                            end;                        next;                    end;                first;                EnableControls;            end;     Xls_Close (FileHandle);     Screen.Cursor := crDefault;     Application.MessageBox('数据导出完毕!','信息',MB_OK);    end;    end    else    begin    Screen.Cursor := crHourGlass;     FileHandle := Xls_Create(tt);     Xls_SetFormat(FileHandle,'yyyy-mm-dd hh:mm:ss');     with MydataSet do            begin                Open;                    DisableControls;                First;                for y:= 0 to FieldCount-1 do                        Xls_SetString(FileHandle, 0, y,Fields[y].FieldName);                for x:=0 to RecordCount-1 do                    begin                        for y:=0 to FieldCount-1 do                            begin                                if FieldTypeNames[Fields[y].datatype]='WideString'  then                                    Xls_SetString(FileHandle, x+1, y,Fields[y].AsString)                                else if FieldTypeNames[Fields[y].datatype]='LargeInt'  then                                    Xls_SetInteger(FileHandle, x+1, y,Fields[y].Asinteger)                                else if FieldTypeNames[Fields[y].datatype]='Integer'  then                                    Xls_SetInteger(FileHandle, x+1, y,Fields[y].Asinteger)                                else if FieldTypeNames[Fields[y].datatype]='BCD'   then                                    Xls_SetDouble(FileHandle, x+1, y,Fields[y].Asfloat)                                else  Xls_SetString(FileHandle, x+1, y,Fields[y].AsString);                                Application.ProcessMessages;                            end;                        next;                    end;                first;                EnableControls;            end;     Xls_Close (FileHandle);     Screen.Cursor := crDefault;     Application.MessageBox('数据导出完毕!','信息',MB_OK);    end;      //打开刚刚导出成功的EXCEL文件,函数ShellExecute为系统函数,在ShellAPI中,需引号    ShellExecute(FileHandle, 'open', PChar(tt), nil, nil, SW_SHOW);end;去找一下Xls,MyClass类 

热点排行