怎样将DBGRID中的数据导出至EXCEL表格中(0分)

  • 主题发起人 主题发起人 gaodengchao
  • 开始时间 开始时间
G

gaodengchao

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将DBGRID中的数据导出至EXCEL表格中?
等等等.........
 
你可以用TWordApplication來處理這個問題.
 
老兄没分,像我这样的人不多了啊.

function TForm1.ExportExcel(FileName:string;DbGrid:TDbgrid): Boolean;
var
ExcelApp:Variant;
ExcelRow,ExcelCol,Temp_Row,fistcol,tempcol: integer;
ExcelRows, Excelcols,fistcols: integer; //记录汇总行位置
temps,tempstr:string;
flag:boolean;
InsertTemp,Temp:string;
Dataset:Tdataset;
begin
Result := false;
DataSet:=DbGrid.DataSource.DataSet; //取得dbgrid的数据集
if not DataSet.Active or (DataSet.RecordCount=0) then exit;
if not FileExists(FileName) Then exit; //假如文件不存在。。
try
ExcelApp:=UnAssigned;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.Visible:=True;
except
ExcelApp.Quit;
ExcelApp.Free;
ExcelApp:=Unassigned;
// Showmsg('电脑未安装MicroSoft Excel,是否继续导出?'+#13#13+'导出后在您的机器上不能直接打开,必须安装Excel后才能打开!',CoMessageTitle);
exit;
end; //try
ExcelApp.Caption := FileName;
try
ExcelApp.Workbooks.Open(FileName);
except
ExcelApp.Quit;
ExcelApp.Free;
ExcelApp:=Unassigned;
// Showmsg('打开Excel模板出错,不能导出数据',CoMessageTitle);
exit;
end; //try
DataSet.First;
ExcelApp.WorkSheets[1].Activate;
DbGrid.DataSource.DataSet.DisableControls;
for ExcelRow :=1 to 20 Do //循环行数...
begin
for Excelcol := 1 to 20 do //循环列数...
begin
Temp:=trim(ExcelApp.ActiveSheet.cells[ExcelRow, Excelcol].value); //取得每一个cell的值..
if Not (DataSet.eof) then
begin
if copy(temp,1,1)='#' then
begin
Temp:=copy(temp,2,Length(temp)-1); //Temp为#后面的字段名
if DataSet.Fields.FindField(Temp)=Nil Then
begin
ExcelApp.ActiveSheet.cells[ExcelRow+1, Excelcol].Value:=temp;
Continue;
end; //is Nil
tempstr:=DataSet.FieldByName(Temp).asstring;
ExcelApp.ActiveSheet.cells[ExcelRow, Excelcol].Value := tempstr;//插入一格数据
end; //is '#'

end; // is not eof
end; //for Excelcol
if not DataSet.Eof then DataSet.Next;
end; //for ExcelRow
end;
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=5983
 
多谢多谢,小弟初来,分数还不多,不好意思,下次一定献分!
 
var
I: Integer;
Str,pfilename: String;
StrList: TStringList;//用于存储数据的字符列表
begin
if query1.Active then
begin
if savedialog1.Execute then //确定保存文件名
begin
if strpos(pchar(savedialog1.FileName),pchar('.xls'),)<>nil then
pfilename:=savedialog1.FileName
else
pfilename:=savedialog1.FileName+'.xls';
StrList := TStringList.Create;//下面是关键
strlist.Add('物品名称'+#9+'型号规格'+#9+'单位'+#9+'单价'+#9+'数量'+#9+'金额'+#9+'批号'+#9+'产地'+#9+'供货公司'+#9+'发票号'+#9+'材料类别'+#9+'发票日期'+#9+'入库日期'+#9+'制单人'+#9+'拼音编码'+#9);//EXCEL标题头
try
with query1 do
begin
First;
while not Eof do
begin
Str:='';
for I := 0 to FieldCount-1 do
Str:= Str+Fields.AsString+#9; //关键是在这儿
StrList.Add(Str);
Next;
end;
try
StrList.SaveToFile(pfilename);
except
application.MessageBox('您指定的文件正被其他程序所使用或含有非法字符,请结束其使用或重新输入文件名!','错误',mb_ok+mb_iconstop);
end;

end;



end;
 
偷懒方法[:D]
用F1BOOK连数据源,然后导出为EXCEL文件
 
自己写个函数不就可以了吗?
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4091
作者?: archonwang
标题?: DBGrid 应用全书(全面修订正在进行时)
关键字:
分类?: 开发经验
密级?: 公开
 
后退
顶部