怎样将DBGRID中的数据转换成excel或文本文件,急急急!!!!!!! (100分)

  • 主题发起人 kuangwenwei
  • 开始时间
K

kuangwenwei

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将DBGRID中的数据转换成excel或文本文件,急急急
 
搜索以下,有好多这样的帖子呀
也有很多办法
可以使用其他的控件
也可以直接写代码
 
什么控件,哪里可以DOWN?
 
procedure TForm1.EXCEL3Click(Sender: TObject);
var
eclApp,WorkBook:Variant;//声明为OLE Automation 对象
xlsFileName:string;
i,j,n:integer;
begin
if SaveDialog1.Execute then
begin
xlsFileName:=SaveDialog1.FileName;
if fileexists(SaveDialog1.FileName) then DeleteFile(SaveDialog1.FileName);
try
//创建OLE对象Excel Application与 WorkBook
eclApp:=CreateOleObject('Excel97.Application');
WorkBook:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安装Microsoft Excel。');
Exit;
end;
try
Screen.Cursor:=crHourGlass;
workBook:=eclApp.workBooks.Add;
i:=1; //EXECL表行号
n:=0;//query字段N序号
Query1.First;
j:=1;
for n:=0 to Query1.FieldCount -1 do
begin
eclApp.Cells(i,j):=Query1.fields[n].DisplayLabel;
j:=j+1;
end;
i:=2; //EXECL表行号
n:=0;//query字段N序号
while not Query1.Eof do begin
j:=1;//EXECL表列号
for n:=0 to Query1.FieldCount -1 do
begin
eclApp.Cells(i,j):=Query1.fields[n].AsString;
j:=j+1;
end;
Query1.Next;
i:=i+1;
end;
{eclApp.Cells(1 , 1):='字符型';
eclApp.Cells(2 , 1):='Excel文件';
eclApp.Cells(1 , 2):='Money型';
eclApp.Cells(2 , 2):=10.01;
eclApp.Cells(1 , 3):='日期型';
eclApp.Cells(2 , 3):=Date; }
WorkBook.SaveAs(xlsFileName);
Application.MessageBox('操作在没有警告的情况下正常结束!','完成',mb_ok+mb_iconinformation);
WorkBook.close;
eclApp.Quit;//退出Excel Application
eclApp:=Unassigned;//释放VARIANT变量
Screen.Cursor:=crdefault;
except
ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。');
WorkBook.close;
eclApp.Quit;
//释放VARIANT变量
eclApp:=Unassigned;
end;
END;
END;
 
procedure TForm1.N5Click(Sender: TObject);
var
str:string;
filename:textfile;
i,j,n:integer;
p:string;
begin
if SaveDialog2.Execute then
begin
str:=SaveDialog2.FileName;
assignfile(filename,str);
if fileexists(str) then DeleteFile(SaveDialog1.FileName);
try
Screen.Cursor:=crHourGlass;
rewrite(filename);
p:='~';
str:='';
n:=0;//query字段N序号
Query1.First;
for n:=0 to Query1.FieldCount -1 do
begin
str:=str+Query1.fields[n].DisplayLabel+p;
end;
writeln(filename,str);
n:=0;//query字段N序号
str:='';
while not Query1.Eof do begin
for n:=0 to Query1.FieldCount -1 do
begin
str:=str+Query1.fields[n].AsString+p;
end;
writeln(filename,str);
str:='';
Query1.Next;
end;
except
ShowMessage('写文件时产生错误。可能是该文件已被其他程序打开,或系统错误。');
closefile(filename);
END;
Screen.Cursor:=crdefault;
Application.MessageBox('操作在没有警告的情况下正常结束!','完成',mb_ok+mb_iconinformation);
closefile(filename);
end;
end;
 
哪里有这样的控件吗?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517
里面的758347号子贴,就是一个首先的控件,不过是使用com来完成的。当然还有一些bug。供你参考
帖子大了一些,打开的速度比较慢,要有耐心吆。

还有另外一种办法是直接生成excel文件的,这个不需要用com,在论坛的历史数据中也可以找到。
 
DbGrid 中的数据,其实就是数据库中的数据,
要看是什么类型的数据库。

VFP 之类的可以很方便地转换。直接调用VFP或Excel 的功能。
 
听说dbgrideh可以实现,不知道要怎样才能做到?
 
TDataSetExport:自制的一个小控件,用于将TDataSet的数据集导出到Excel中
http://asp.6to23.com/bcbcn/control/dncontrol.asp?id=140
 
有没有原代码?
 
哪里有将数据集导出到EXCEL的控件,要有源代码
 
kingdeezj,请问,这是把query中的数据还是把dbgrid中的数据导入excel,我的dbgrid中有
计算字段,该怎么处理
 
别找控件了,我看了上面的就能实现,呵呵
 
这是我自己写的一个将DBGRID数据转换到XLS文件的过程,中间用到了F1BOOK6,这个控件
可以自己找,或者直接注册TTF16.OCX控件也可以,然后在DELPHI导入控件。
下面的程序在DELPHI6.0中调试通过,其中F_BBDY是个FORM,FB是F1BOOK6控件,SD是SAVEDIALOG.里面有三
个参数,第一个是DBGRID,即要导出的DBGRID,第二个是ADOQUERY,即DBGRID所连接的数
据源,第三个是文件标题。可以根据自己的实际需要修改参数。

procedure tf_main.gridtoxls(dbg:tdbgrid;qry:tadoquery;btmc:string);
//将DBGRID中的数据保存为XLS格式文件
var i,h:integer;
fn:string;
fcell:IF1cellFormat;
begin
if qry.IsEmpty then exit;
if not sd.Execute then exit;
h:=3;
qry.DisableControls;
try
application.CreateForm(tf_bbdy,f_bbdy);
f_bbdy.fb.MaxCol:=dbg.Columns.Count;
f_bbdy.fb.MaxRow:=qry.RecordCount+3;
f_bbdy.fb.SetSelection(1,1,f_bbdy.fb.MaxRow,f_bbdy.fb.MaxCol);
fcell:=f_bbdy.fb.GetCellFormat;
fcell.WordWrap:=false;
f_bbdy.fb.SetCellFormat(fcell);
for i:=1 to 3 do
f_bbdy.fb.RowHeight[h]:=300;
f_bbdy.fb.SetSelection(1,1,2,f_bbdy.fb.MaxCol);
fcell:=f_bbdy.fb.GetCellFormat;
fcell.MergeCells:=true;
fcell.AlignHorizontal:=f1haligncenter;
fcell.FontName:='宋体';
fcell.FontSize:=14;
f_bbdy.fb.SetCellFormat(fcell);
f_bbdy.fb.TextRC[1,1]:=btmc;
for i:=1 to dbg.Columns.Count do
begin
f_bbdy.fb.ColWidth:=dbg.Columns[i-1].Width*50;
f_bbdy.fb.TextRC[h,i]:=dbg.Columns[i-1].Title.Caption;
end;
qry.First;
while not qry.Eof do
begin
inc(h);
f_bbdy.fb.RowHeight[h]:=300;
for i:=1 to dbg.Columns.Count do f_bbdy.fb.TextRC[h,i]:=trim(dbg.Columns[i-1].Field.AsString);
qry.Next;
end;
f_bbdy.fb.SetSelection(3,1,f_bbdy.fb.MaxRow,f_bbdy.fb.MaxCol);
fcell:=f_bbdy.fb.GetCellFormat;
fcell.FontName:='宋体';
fcell.FontSize:=11;
f_bbdy.fb.SetCellFormat(fcell);
f_bbdy.fb.SetBorder(-1,1,1,1,1,-1,clBlack,clBlack,clBlack,clBlack,clBlack);
fn:=sd.FileName;
if uppercase(copy(fn,length(fn)-3,4))<>'.XLS' then fn:=fn+'.xls';
f_bbdy.fb.Write(fn,11);
f_bbdy.Free;
except
on e:exception do
begin
qry.First;
qry.EnableControls;
f_bbdy.Free;
application.MessageBox(pchar('无法将数据保存为文件!'+#13+#13+e.Message),'错误信息',16);
exit;
end;
end;
qry.First;
qry.EnableControls;
end;
 
http://wolfsoft.nugoo.com/docdetail.asp?flag=1&id=15
http://wolfsoft.nugoo.com/docdetail.asp?flag=13&id=5
 
请问:TDataSetExport 是如何使用的?我添加那个控件,运行程序时有如下出错提示:
[Fatal Error] Unit1.pas(8): File not found: 'DataSetExport.dcu'
 
你用WINDOWS查找功能找到上述文件“'DataSetExport.dcu”然后将它COPY到你的DELPHI目录
下的LIB文件夹或者你的工程文件夹下即可。
 
送你一个过程
////加入TExcelApplication控件
procedure TfrmQuery.WriteExcel(AdsData: TDataSet; sName, Title: string);
var
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
i, j: integer;
//filename: string;
begin
//filename := concat(sName, '.xls');
try
ExcelApplication1 := TExcelApplication.Create(Application);
ExcelWorksheet1 := TExcelWorksheet.Create(Application);
ExcelWorkbook1 := TExcelWorkbook.Create(Application);
ExcelApplication1.Connect;
except
Application.Messagebox('Excel 没有安装!', '系统提示', MB_ICONERROR + mb_Ok);
Abort;
end;
try
Screen.Cursor := crSQLWait;
ExcelApplication1.Workbooks.Add(EmptyParam, 0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
AdsData.First;
for j := 0 to AdsData.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;
ExcelWorksheet1.Cells.item[3, j + 1].font.size := '10';
end;
for i := 4 to AdsData.RecordCount + 3 do
begin
for j := 0 to AdsData.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[i, j + 1] :=
AdsData.Fields[j].Asstring;
ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10';
end;
AdsData.Next;
end;
ExcelWorksheet1.Columns.AutoFit;
ExcelWorksheet1.Cells.item[1, 2] := Title;
ExcelWorksheet1.Cells.Item[1, 2].font.size := '14';
ExcelWorksheet1.SaveAs(sName);
Application.Messagebox(pchar('数据成功导出' + sName), 'Hello',
mb_Ok);
finally
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
ExcelWorksheet1.Free;
ExcelWorkbook1.Free;
Screen.Cursor := crDefault;
end;
end;
////////////////////
//文本文件
var
F: TextFile;
begin
try
if SaveDialog1.Execute then
begin
AssignFile(F, SaveDialog1.FileName);
Rewrite(F);
qry.First;
Writeln(F, qry.Recordset.GetString(2, qry.RecordCount, #9, #13#10, 'Null'));
qry.close;
DataSource1.DataSet := qry;
CloseFile(F);
end;
except;
CloseFile(F);
end;
end;
 
http://www.playicq.com/dispdocnew.php?id=3589
我写的一个控件 不知道合你合你的用
 
顶部