如何将查询结果导出为excel表??

swwwwwww 2005-07-04 09:06:32
如何将select * from cjb A join cjh B on A.id=B.id where addtime between c and d的结果导出为excel表??
需要哪些组件?代码如何写呀?
...全文
325 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
swwwwwww 2005-07-04
  • 打赏
  • 举报
回复
将楼上的全部代码复制后,粘在哪个位置?
swwwwwww 2005-07-04
  • 打赏
  • 举报
回复
没找到DBGridEh这个组件呀?
hqhhh 2005-07-04
  • 打赏
  • 举报
回复
如果在SQL Server2000中可以直接把查询的结果复制到Excel,
如果在Delphi中,可以DBGridEh控件,它有一个功能可以把查询的结果导出多种格式,如.xls,.rtf,.txt等
Mrkang 2005-07-04
  • 打赏
  • 举报
回复
楼上的方法不用任何组件.建议用楼上的方法
swwwwwww 2005-07-04
  • 打赏
  • 举报
回复
需要添加哪些组件??
hc0007 2005-07-04
  • 打赏
  • 举报
回复
procedure DbGridToExcel(cx_dbgr:TDBGrid);
var
i,j,m:integer;
ExcelApp:Variant;
FHint:TFHint;
begin
if cx_dbgr.DataSource=nil then exit;
if cx_dbgr.DataSource.DataSet=nil then exit;
if not cx_dbgr.DataSource.DataSet.Active then exit;
if cx_dbgr.DataSource.DataSet.RecordCount<=0 then exit;

FHint:=TFhint.Create(application);
FHint.Show;
FHint.Update;
try
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets.Add;
// ExcelApp.ActiveSheet:='Sheet1';
ExcelApp.Visible:=true;
{scExcelExport1.Dataset:=cx_dbgr.DataSource.DataSet;
scExcelExport1.ExportDataset;
scExcelExport1.Disconnect;}
j:=2;
with cx_dbgr.DataSource.DataSet do
begin
cx_dbgr.DataSource.DataSet.First;
cx_dbgr.DataSource.DataSet.DisableControls;
for i:=0 to cx_dbgr.Columns.Count-1 do
begin
for m:=0 to cx_dbgr.Columns.Count-1 do
begin
if cx_dbgr.DataSource.DataSet.Fields[i].FieldName=cx_dbgr.Columns[m].FieldName then
ExcelApp.WorkSheets[1].Cells[1,i+1].Value :=cx_dbgr.Columns[m].Title.Caption;
end;
end;
ExcelApp.ActiveSheet.Rows[1].Font.Name:='隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Size:=12;

while not cx_dbgr.DataSource.DataSet.Eof do
begin
for i:=0 to FieldCount-1 do
begin
ExcelApp.WorkSheets[1].Cells[j,i+1].Value :=Fields[i].AsVariant;
end;
Next;
j:=j+1;
end;
end;
finally
cx_dbgr.DataSource.DataSet.EnableControls;
Fhint.Free;
end;
end;


///------------------------------

procedure DataSetToExcel(dt:TDataSet);
var
i,j:integer;
ExcelApp:Variant;
FHint:TFHint;
begin
// if cx_dbgr.DataSource=nil then exit;
if dt=nil then exit;
if not dt.Active then exit;
if dt.RecordCount<=0 then exit;

FHint:=TFhint.Create(application);
FHint.Show;
FHint.Update;
try
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets.Add;
// ExcelApp.ActiveSheet:='Sheet1';
ExcelApp.Visible:=true;
{scExcelExport1.Dataset:=cx_dbgr.DataSource.DataSet;
scExcelExport1.ExportDataset;
scExcelExport1.Disconnect;}
j:=2;
with dt do
begin
First;
DisableControls;
for i:=0 to dt.FieldCount-1 do
begin
ExcelApp.WorkSheets[1].Cells[1,i+1].Value :=dt.Fields[i].DisplayName;
end;
ExcelApp.ActiveSheet.Rows[1].Font.Name:='隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Size:=12;

while not dt.Eof do
begin
for i:=0 to FieldCount-1 do
begin
ExcelApp.WorkSheets[1].Cells[j,i+1].Value :=Fields[i].AsVariant;
end;
Next;
j:=j+1;
end;
end;
finally
dt.EnableControls;
FHint.Free;
end;
end;
sdqhlyf 2005-07-04
  • 打赏
  • 举报
回复
现在这方面的操作也已算常规操作。
hqhhh 2005-07-04
  • 打赏
  • 举报
回复
楼上的方法可以导出Excel,但需要系统先安装Excel,
而这种用控件的方法不需要事先安装Excel

你下载后看一下他自带的事例文件,里面有一个过程是专门导出其它格式的,这样你可以设置一个公共过程,只要有用到DBGridEh的地方,只要增加一个事件名,即可把列表框中的全部内部导出,也可以选择导出一部分数据。
hqhhh 2005-07-04
  • 打赏
  • 举报
回复
在百度搜索“EhLib”,多的是,第三方控件,Delphi没有自带
swwwwwww 2005-07-04
  • 打赏
  • 举报
回复
这串代码是写在哪个位置?耍要哪些控件
亮剑_ 2005-07-04
  • 打赏
  • 举报
回复
导出数据到Excel有好多种方法,楼上采用的是OLE方式。再提供一种给你参考,也是采用OLE方式,由于使用了Excel内置的取数据集功能,速度快一些:

procedure RsToExcel(AdoQuery1: TAdoQuery; ExcelFileName: string);
var
ExcelApp, Book, Sheet, Range, xlQuery: OleVariant;
begin
if not ADOQuery1.Active then
ADOQuery1.Open;

ExcelApp := CreateOleObject( 'Excel.Application' ); //创建
try
if ExcelApp.Workbooks.count < 1 then
ExcelApp.WorkBooks.Add;
Book := ExcelApp.Workbooks[1];
if Book.Worksheets.Count < 1 then
Book.Worksheets.Add;
Sheet := Book.Worksheets[1];

xlQuery := Sheet.QueryTables.Add(ADOQuery1.Recordset, Sheet.Range['A3']);
//xlQuery.FieldNames := false;
xlQuery.Refresh;

Sheet.SaveAs(ExcelFileName);
finally
Sheet := Unassigned;
Book := Unassigned;
if not VarIsEmpty(ExcelApp) then
ExcelApp.Quit;
ExcelApp := Unassigned;
if ADOQuery1.Active then ADOQuery1.Close;
end;
end;

2,497

社区成员

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

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