新手求教DBGrid中的数据导出问题(100分)(100分)

  • 主题发起人 主题发起人 squire
  • 开始时间 开始时间
S

squire

Unregistered / Unconfirmed
GUEST, unregistred user!
要将DBGrid中的查询结果导出为access文件或excel文件,就像foxmail的导出地址薄功能,
请问高手应该怎么做呢?用什么控件?
 
dbgrid不行数据在table或query中
 
如果是我首先用DAO的底层API建立一个新的ACCESS数据库(如果嫌太麻烦,可用专门的控件来实现)。
然后用TQUERY调用SQL语句来建立新表,然后再导入记录。
如果是导入Excel中就有些麻烦,因为Excel的文件格式MS是保密的[:(!],没法直接生成.xls文件。
所以你必须确保机子里装了EXCEL,然后用delphi中控制office的专用控件来导出数据到Excel中。
关于这方面的例子论坛上有很多,你搜索一下就得到一大堆。
 
将DBGrid中的数据导入Excel表格中
yuan751204


摘 要:将DBGrid中的数据导入Excel表格中
关键字:Excel
类 别:数据库




写数据库程序时,通常希望把DBGrid列表中的数据导入excel表格,以下通过在数据模块中写一个共用过程,在任何地方需要时进行调用即可:

const
{ XlWBATemplate }
xlWBATChart = -4109;
xlWBATExcel4IntlMacroSheet = 4;
xlWBATExcel4MacroSheet = 3;
xlWBATWorksheet = -4167;

procedure Tsysdb.SaveToExcel(Db_data:TDBGrid);
var XlAPP:Variant;
excelcount:integer;
Sheet1:Variant;
i,j:integer;
begin
if not Db_data.DataSource.DataSet.Active then exit;
if Db_data.DataSource.DataSet.RecordCount<1 then exit;
//创建excel对象
try
XlApp:=createoleobject('Excel.Application');
XLApp.Visible:=false;
excelcount:=XLApp.Workbooks.count;
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet1 := XLApp.Workbooks[1].WorkSheets['sheet1'];
except
showmessage('你的电脑没出息有安装excel程序,无法完成此功能!');
exit;
end; //setfocus;处理标题
for j:=0 to Db_data.FieldCount-1 do
begin
sheet1.cells[1,j+1]:=Db_data.Columns[j].Title.Caption;
end; //处理记录
Db_data.DataSource.DataSet.First;
i:=2;
while not Db_data.DataSource.DataSet.Eof do
begin //处理一行
for j:=0 to Db_data.FieldCount-1 do
begin
if Db_data.Fields[j]<>nil then
Sheet1.cells[i,j+1]:=trim(Db_data.Fields[j].asstring)
else
Sheet1.cells[i,j+1]:='';
end; i:=i+1;
Db_data.DataSource.DataSet.Next;
end;
XLApp.Visible:=true;
end;

 
导出到Excel表格:
procedure Tf_Normal.ExportToExcel(DbGrid: TDBGrid; Query: TAdoQuery;ExcelApp:variant);
var
i,j,FieldNum:integer;
begin
with Query do
begin
DisableControls;
fieldNum := dbgrid.fieldCount;
for i:=1 to fieldNum do //写表头
begin
ExcelApp.Cells[1,i]:=Fields[i-1].FieldName;
end;
first;
i:=2;
while not eof do
begin
for j:=1 to fieldNum do
begin
ExcelApp.Cells[i,j]:=fields[j-1].AsString;
end;
inc(i);
if (i mod 20)=0 then
ExcelApp.Cells[i+10,1].Activate;
next;
end;
EnableControls;
end;
end;
procedure Tf_Normal.ButtonClick(Sender: TObject);
var
ExcelApp: variant;
begin
application.ProcessMessages;
try
ExcelApp:=createoleobject('Excel.application');
except
messageDlg('请先安装MicroSoft Excel',mtError,[mbok],0);
exit;
end;
ExcelApp.Visible := True;
ExcelApp.Caption := '名字';
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
ExcelApp.WorkSheets[1].name:='表名';
ExcelApp.ActiveSheet.Rows[1].Font.Bold:= True;
ExcelApp.Columns[1].NumberFormatLocal:='@';
ExportToExcel(DbGrid: TDBGrid; Query: TAdoQuery;ExcelApp:variant);
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
end;
 
多人接受答案了。
 
后退
顶部