DBGridEh显示的数据导出到EXCEL?

老杨_sz 2008-06-23 04:13:01
DBGridEh显示的数据通过BTN按钮导出到EXCEL,点击BTN时显示保存位置及输入文件名保存。

具体怎样实现?谢谢
...全文
326 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dhammacakkhu 2008-06-27
  • 打赏
  • 举报
回复

uses
DBGridEhImpExp;

function DGExportExcel(DBGridEh: TDBGridEh): boolean;
var
SD:TSaveDialog;
begin
try
Result := False;
SD := TSaveDialog.Create(Application);
SD.Filter := '*.xls(Excel 文档)|*.xls';
if SD.Execute then
begin
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, DBGridEh, SD.FileName + '.xls', true);
Result := true;
end;
finally
SD.Free;
end;
end;

kampan 2008-06-25
  • 打赏
  • 举报
回复
之前也做过,大概是这样:procedure TForm1.Button1Click(Sender: TObject);
var
i,Cel,Row: Integer;
EParam : OleVariant;
begin
try
self.ExcelApplication1.Connect;
except
ShowMessage('´ò¿ªExcelʧ°Ü');
exit;
end;
self.ExcelApplication1.Visible[0] := true;
self.ExcelApplication1.Caption := 'µ¼ÈëexcelÊÔÑé';
ExcelWorkbook1.ConnectTo(ExcelApplication1.
Workbooks.Add(EmptyParam,0));

ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);//ExcelWorkbook1ÓëEexcelapplication1½¨Á¢Á¬½Ó
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1ÓëExcelworkbook1½¨Á¢Á¬½Ó
self.ADOQuery1.Close;
self.ADOQuery1.Open;
self.ExcelWorksheet1.Cells.Item[1,1] := 'ÐÕÃû';
self.ExcelWorksheet1.Cells.Item[1,2] := 'ÄêÁä';
self.ExcelWorksheet1.Cells.Item[1,3] := '˵Ã÷';
self.ADOQuery1.First;
row := 2;
while not self.ADOQuery1.Eof do
begin
Cel := 1;
for i := 1 to self.ADOQuery1.RecordCount do
begin
self.ExcelWorksheet1.Cells.Item[row,Cel] := self.ADOQuery1.Fields[i-1].AsString;
Cel := Cel + 1;
end;
self.ADOQuery1.Next;
Row := Row + 1;
end;

ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
showmessage('Êý¾Ýת»»Íê±Ï£¡');
end;
kampan 2008-06-25
  • 打赏
  • 举报
回复
受教了…………
studyrandy 2008-06-25
  • 打赏
  • 举报
回复
学习了,以前只搞懂怎么导出的,另外的保存什么的是手动保存的,有机会学习了。
tim_zhang 2008-06-24
  • 打赏
  • 举报
回复
Import/Export TDBGridEh data to/from various formats.
EhLib have set of functions to export data from DBGridEh to Text, Csv, HTML, RTF, XLS and internal formats. It can write data to stream (TStream object) or to file.
Example
Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:\temp\file1.txt',False);
C++: SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:\\temp\\file1.txt",false);
EhLib have set of functions to import data from Text and internal formats to DBGridEh's dataset. It can read data to stream (TStream object) or from file.

pengxuan 2008-06-24
  • 打赏
  • 举报
回复

procedure TF_main.ToExcel(DBGridEh:TDBGridEh);
begin
if SaveDialog_toExcel.Execute then
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,DBGridEh,SaveDialog_toExcel.FileName,True);
end;
shuihan20e 2008-06-23
  • 打赏
  • 举报
回复
EXCEL可以做数据库,可以通过ADO来导出来,和ACCESS,SQLSERVER没有区别

也可通过OLE或者其他方式来导出
RoverX 2008-06-23
  • 打赏
  • 举报
回复

Import/Export TDBGridEh data to/from various formats.
EhLib have set of functions to export data from DBGridEh to Text, Csv, HTML, RTF, XLS and internal formats. It can write data to stream (TStream object) or to file.
Example
Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:\temp\file1.txt',False);
C++: SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:\\temp\\file1.txt",false);
EhLib have set of functions to import data from Text and internal formats to DBGridEh's dataset. It can read data to stream (TStream object) or from file.
GDTOPONE 2008-06-23
  • 打赏
  • 举报
回复
从网上摘来一段代码,修改了一下,你看是否合用:

uses ComObj;{引用单元}


相关过程:

procedure CopyDbDataToExcel(Args: array of const;F:string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;

try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;

XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook := High(Args) + 1;

for I := Low(Args) to High(Args) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGridEh(Args[I].VObject).Name;
Sheet := XLApp.Workbooks[1].WorkSheets[TDBGridEh(Args[I].VObject).Name];

if not TDBGridEh(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
TDBGridEh(Args[I].VObject).DataSource.DataSet.DisableControls;

TDBGridEh(Args[I].VObject).DataSource.DataSet.first;
for iCount := 0 to TDBGridEh(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] :=
TDBGridEh(Args[I].VObject).Columns.Items[iCount].Title.Caption;

jCount := 1;
while not TDBGridEh(Args[I].VObject).DataSource.DataSet.Eof do
begin
for iCount := 0 to TDBGridEh(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] :=
TDBGridEh(Args[I].VObject).Columns.Items[iCount].Field.AsString;

Inc(jCount);
TDBGridEh(Args[I].VObject).DataSource.DataSet.Next;
end;
XlApp.DisplayAlerts := False;
XlApp.activeworkbook.SaveAs(F);
XlApp.activeworkbook.close;
XlApp.quit;
TDBGridEh(Args[I].VObject).DataSource.DataSet.EnableControls;
end;
Screen.Cursor := crDefault;
end;




调用:

procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
CopyDbDataToExcel([DBGridEh1],SaveDialog1.FileName);
end;
gyk120 2008-06-23
  • 打赏
  • 举报
回复
http://download.csdn.net/source/137084
到这里看看吧
在他人的DBGridEh导出Excel的基础上进行改进,增加功能如下: 1、支持多个DBGridEH同时导出Excel的不同Sheet页 2、进度条与数据进度保持一致 3、增加了进度百分比显示 //调用方法: procedure TForm1.Button1Click(Sender: TObject); var DbOut: TDBGridEhToExcel; i: integer; begin try DbOut := TDBGridEhToExcel.Create(Self); for i := 0 to 9 do //初始化数组 begin DbOut.DBGridEhRecAry[i].TempDBGridEh := nil; DbOut.DBGridEhRecAry[i].TitleName := ''; DbOut.DBGridEhRecAry[i].SheetTabName := ''; end; //有多少个DBGridEh数据导出,此处表示两个 DbOut.DBGridEhRecLength := 2; //统计结果一 DbOut.DBGridEhRecAry[0].TempDBGridEh := dbgSpotCheckCount; DbOut.DBGridEhRecAry[0].TitleName := '统计结果一'; DbOut.DBGridEhRecAry[0].SheetTabName := '统计结果一'; //统计结果二 DbOut.DBGridEhRecAry[1].TempDBGridEh := dbgValuationCount; DbOut.DBGridEhRecAry[1].TitleName := '统计结果二'; DbOut.DBGridEhRecAry[1].SheetTabName := '统计结果二'; DbOut.TitleName := '统计结果'; DbOut.ShowProgress := True; DbOut.ShowOpenExcel := True; DbOut.ExportToExcel; finally FreeAndNil(DbOut); end; end; 还可以改进的地方,比如: 1、标题栏占用几行,字体,字体颜色,字体大小,背景颜色可以封装提供设置方法; 2、字段标题字体,字体颜色,字体大小; 3、表格样式设置; 就是动态数据不会封装到类里面,如果有高人封装得更好一些,请发一份我;

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧