后台:access,数据表为data,包含6个字段,分别为a,b,c,d,e,f.
现在想要将DBGrid1中显示的数据导入到excel中,不知道语句怎么写,请大家帮忙?谢谢!!
20 个解决方案
#1
你是想把数据库里的数据直接全部导出到EXCEL里呢,还是说把数据库里的数据先显示在DBgrid中有时候要做一定的增减修改之后再导出到excel中呢?
#2
随便搜一搜也能找到答案啦
若是较复杂的,偶提供有偿支持
若是较复杂的,偶提供有偿支持
#3
DELPHI有操作WORD的库的,虽然不太好用,但简单的输入还是可以的
#4
给你一篇文章:
在DELPHI中操作Excel
□ 曾剑平
在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?
我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。
关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。
因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。
下面,以Delphi为例,说明这种调用方法。
Unit excel;
Interface
Uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,
{ ComObj是操作OLE对象的函数集}
Type
TForm1=class(TForm)
Button1:TButton;
Procedure Button1Click(Sender:Tobject);
Private
{ Private declaration}
Public
{ Public declaration }
end;
var
Form1:Tform1;
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(sender:Tobject);
var
eclApp,WordBook:Variant; {声明为OLE Automation对象}
xlsFileName:string;
begin
xlsFileName:=’ex.xls’;
try
{创建OLE对象:Excel Application与WordBook}
eclApp:=CreateOleObject(‘Excel.Application’);
WorkBook:=CreateOleObject(Excel.Sheet’);
Except
Application.MessageBox(‘你的机器没有安装Microsoft Excel’,
’使用Microsoft Excel’,MB_OK+MB_ICONWarning);
Exit;
End;
Try
ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);
WorkBook:=eclApp.workbooks.Add;
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);
WorkBook.close;
ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);
Workbook:=eclApp.WorkBooks.Open(xlsFileName);
EclApp.Cells(1,4):=’Excel文件类型’;
If MessageDlg(xlsFileName+’已经被修改,是否保存?’,
mtConfirmation,[mbYes,mbNo],0)=mrYes then
WorkBook.Save
Else
WorkBook.Saved:=True; {放弃保存}
Workbook.Close;
EclApp.Quit; //退出Excel Application
{释放Variant变量}
eclApp:=Unassigned;
except
ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);
WorkBook.close;
EclApp.Quit;
{释放Variant变量}
eclApp:=Unassigned;
end;
end;
end.
了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
在DELPHI中操作Excel
□ 曾剑平
在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?
我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。
关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。
因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。
下面,以Delphi为例,说明这种调用方法。
Unit excel;
Interface
Uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,
{ ComObj是操作OLE对象的函数集}
Type
TForm1=class(TForm)
Button1:TButton;
Procedure Button1Click(Sender:Tobject);
Private
{ Private declaration}
Public
{ Public declaration }
end;
var
Form1:Tform1;
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(sender:Tobject);
var
eclApp,WordBook:Variant; {声明为OLE Automation对象}
xlsFileName:string;
begin
xlsFileName:=’ex.xls’;
try
{创建OLE对象:Excel Application与WordBook}
eclApp:=CreateOleObject(‘Excel.Application’);
WorkBook:=CreateOleObject(Excel.Sheet’);
Except
Application.MessageBox(‘你的机器没有安装Microsoft Excel’,
’使用Microsoft Excel’,MB_OK+MB_ICONWarning);
Exit;
End;
Try
ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);
WorkBook:=eclApp.workbooks.Add;
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);
WorkBook.close;
ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);
Workbook:=eclApp.WorkBooks.Open(xlsFileName);
EclApp.Cells(1,4):=’Excel文件类型’;
If MessageDlg(xlsFileName+’已经被修改,是否保存?’,
mtConfirmation,[mbYes,mbNo],0)=mrYes then
WorkBook.Save
Else
WorkBook.Saved:=True; {放弃保存}
Workbook.Close;
EclApp.Quit; //退出Excel Application
{释放Variant变量}
eclApp:=Unassigned;
except
ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);
WorkBook.close;
EclApp.Quit;
{释放Variant变量}
eclApp:=Unassigned;
end;
end;
end.
了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
#5
EXCEL的操作有多种方法,最常用的是通过OLE方式
具体方法请搜以前帖子
具体方法请搜以前帖子
#6
//use comobj ,要放一个savedialog
procedure TRemind_F.Btn1Click(Sender: TObject);
var
excelApp,WorkBook:olevariant;
xlsFileName:string;
i,j:integer;
begin
if dlgSave1.Execute then
begin
xlsFileName:=dlgSave1.FileName;
end else
begin
Exit;
end;
try
excelApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.Sheet');
except
Application.MessageBox('系统没有安装Microsoft Excel','Microsoft Excel',MB_OK+MB_ICONWarning);
Exit;
end;
try
//列名,字段名
WorkBook:=excelApp.workbooks.Add;
for i:=0 to dbg1.Columns.Count-1 do
begin
excelApp.Cells(1,i+1):=dbg1.Columns[i].Title.Caption;
end;
dbg1.DataSource.DataSet.First;
j:=2;
while not dbg1.DataSource.DataSet.Eof do
begin
for i:=0 to dbg1.Columns.Count-1 do
begin
excelApp.Cells(j,i+1):=dbg1.Fields[i].Value;
end;
dbg1.DataSource.DataSet.Next;
inc(j);
end;
WorkBook.SaveAS(xlsFileName);
WorkBook.close;
except
ShowMessage('文件导出失败!');
Exit;
end;
Application.MessageBox('保存成功!','恭喜',MB_OK + MB_ICONINFORMATION);
end;
#7
一:用Ole自动化服务,创建一个OLE自动化对像
二:用第三方控件,如Ehlib,dev express
二:用第三方控件,如Ehlib,dev express
#8
没那么烦的,开头uses cxgridexportlink;
事件中
procedure TfrmDaGongYiZhiZuo.cxButton5Click(Sender: TObject);
var
filename:string;
begin
if SaveDialog1.Execute then
begin
filename:=SaveDialog1.FileName;
ExportGridToExcel(filename,cxGrid2,True,True,True,'xls');
showmessage('数据导出成功!');
end;
end;
事件中
procedure TfrmDaGongYiZhiZuo.cxButton5Click(Sender: TObject);
var
filename:string;
begin
if SaveDialog1.Execute then
begin
filename:=SaveDialog1.FileName;
ExportGridToExcel(filename,cxGrid2,True,True,True,'xls');
showmessage('数据导出成功!');
end;
end;
#9
EXCEL的操作有多种方法,最常用的是通过OLE方式.6楼的就是一个简单的例子。仔细看一下。
#10
同意!!!!!!!!!!!!!!!!
#11
前提要安装什么控件?
#12
DEPHI第三方控件cxgrid,你可以上网直接下载用第三方控件包,组件,bpl,什么的,以后编程都会有很多规律性的东西,第三方控件会把很多代码写好的,你直接引用就行了,不像DEPHI自带的控件,真是写的累死了
#13
你这个好像要装cxGrid吧。
#14
procedure DBGridExportData(DBGridName: TDBGrid); //DBGrid导入Excel
var
myexcel: Variant;
workbook: olevariant;
worksheet: olevariant;
i, j, n, t: Integer;
SaveDialog: TSaveDialog;
xlsFileName: string;
begin
if not DBGridName.DataSource.DataSet.Active then Exit;
SaveDialog := TSaveDialog.Create(Application);
SaveDialog.DefaultExt := '.xls';
SaveDialog.Filter := 'Excel文件|*.xls|所有文件|*.*';
if SaveDialog.Execute then
begin
xlsFileName := SaveDialog.FileName;
//xlsFileName := 'apws.xls';
try
try
myexcel := createoleobject('excel.application'); //
myexcel.application.workbooks.add;
myexcel.caption := '批发市场导出数据';
workbook := myexcel.application.workbooks[1];
worksheet := workbook.worksheets.item[1];
except
showmessage('不能建立 EXCEL !' + #13#10 + '请检查是否已经安装了 excell.');
abort;
exit;
end;
i := 1;
j := 1;
for n := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[n].Visible then
begin
worksheet.cells(i, j) := DBGridName.Columns[n].Title.Caption;
j := j + 1;
end;
end;
with DBGridName.DataSource.DataSet do
begin
First;
while not Eof do
begin
inc(i);
n := 0;
for j := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[j].Visible then
begin
t := j - n;
if isNumericEx(fieldbyname(DBGridName.Fields[j].FieldName).AsString) then
worksheet.cells[i, t + 1] := '''' + (fieldbyname(DBGridName.Fields[j].FieldName).AsString)
else
worksheet.cells[i, t + 1] := (fieldbyname(DBGridName.Fields[j].FieldName).AsString);
end
else
inc(n);
end;
Next;
end;
end;
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否确定进行替换?' + #13 + #10 + #13 + #10 +
'若选择"取消",则将在当前目录中' + #13 + #10 +
'生成名为apwstemp.xls的临时文件', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
workbook.SaveAs(xlsFileName);
workbook.Close;
myexcel.Quit;
myexcel := Unassigned;
end
else
begin
if FileExists(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls')) then
begin
DeleteFile(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls'));
end;
WorkBook.SaveAs(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls');
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end
else
begin
WorkBook.SaveAs(xlsFileName);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
except
Application.MessageBox('不能正确操作Excel文件!' + #13 + #10 + #13 + #10 + '可能是該文件已被其他程序打开, 或系統错误',
'警告', MB_OK + MB_ICONSTOP + MB_SYSTEMMODAL);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end;
end;
var
myexcel: Variant;
workbook: olevariant;
worksheet: olevariant;
i, j, n, t: Integer;
SaveDialog: TSaveDialog;
xlsFileName: string;
begin
if not DBGridName.DataSource.DataSet.Active then Exit;
SaveDialog := TSaveDialog.Create(Application);
SaveDialog.DefaultExt := '.xls';
SaveDialog.Filter := 'Excel文件|*.xls|所有文件|*.*';
if SaveDialog.Execute then
begin
xlsFileName := SaveDialog.FileName;
//xlsFileName := 'apws.xls';
try
try
myexcel := createoleobject('excel.application'); //
myexcel.application.workbooks.add;
myexcel.caption := '批发市场导出数据';
workbook := myexcel.application.workbooks[1];
worksheet := workbook.worksheets.item[1];
except
showmessage('不能建立 EXCEL !' + #13#10 + '请检查是否已经安装了 excell.');
abort;
exit;
end;
i := 1;
j := 1;
for n := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[n].Visible then
begin
worksheet.cells(i, j) := DBGridName.Columns[n].Title.Caption;
j := j + 1;
end;
end;
with DBGridName.DataSource.DataSet do
begin
First;
while not Eof do
begin
inc(i);
n := 0;
for j := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[j].Visible then
begin
t := j - n;
if isNumericEx(fieldbyname(DBGridName.Fields[j].FieldName).AsString) then
worksheet.cells[i, t + 1] := '''' + (fieldbyname(DBGridName.Fields[j].FieldName).AsString)
else
worksheet.cells[i, t + 1] := (fieldbyname(DBGridName.Fields[j].FieldName).AsString);
end
else
inc(n);
end;
Next;
end;
end;
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否确定进行替换?' + #13 + #10 + #13 + #10 +
'若选择"取消",则将在当前目录中' + #13 + #10 +
'生成名为apwstemp.xls的临时文件', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
workbook.SaveAs(xlsFileName);
workbook.Close;
myexcel.Quit;
myexcel := Unassigned;
end
else
begin
if FileExists(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls')) then
begin
DeleteFile(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls'));
end;
WorkBook.SaveAs(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls');
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end
else
begin
WorkBook.SaveAs(xlsFileName);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
except
Application.MessageBox('不能正确操作Excel文件!' + #13 + #10 + #13 + #10 + '可能是該文件已被其他程序打开, 或系統错误',
'警告', MB_OK + MB_ICONSTOP + MB_SYSTEMMODAL);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end;
end;
#15
如果不是有特殊的要求,就用第三方控件,很方便.
我有的就是dev express
我有的就是dev express
#16
看6楼回复,不错例子
#17
楼上说的方法是对的>>>>>>>>>>>>>>>>>>>>>
我以前就是这样引用的>>>>>>>>>>>>>>>>>>>>>
#18
我曾经用过,好像是根据excel的格式写数据,当然只能写一个sheet,速度很快,用delphi提供的组件当数据很多时,超慢!!
#19
用文件流来写入excel,速度很快的,具体方法我忘了,你可以查查!!
#20
这贴子回有什么意思呢?一个月了,难道还没搞定。也不知道结贴
#21
#1
你是想把数据库里的数据直接全部导出到EXCEL里呢,还是说把数据库里的数据先显示在DBgrid中有时候要做一定的增减修改之后再导出到excel中呢?
#2
随便搜一搜也能找到答案啦
若是较复杂的,偶提供有偿支持
若是较复杂的,偶提供有偿支持
#3
DELPHI有操作WORD的库的,虽然不太好用,但简单的输入还是可以的
#4
给你一篇文章:
在DELPHI中操作Excel
□ 曾剑平
在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?
我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。
关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。
因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。
下面,以Delphi为例,说明这种调用方法。
Unit excel;
Interface
Uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,
{ ComObj是操作OLE对象的函数集}
Type
TForm1=class(TForm)
Button1:TButton;
Procedure Button1Click(Sender:Tobject);
Private
{ Private declaration}
Public
{ Public declaration }
end;
var
Form1:Tform1;
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(sender:Tobject);
var
eclApp,WordBook:Variant; {声明为OLE Automation对象}
xlsFileName:string;
begin
xlsFileName:=’ex.xls’;
try
{创建OLE对象:Excel Application与WordBook}
eclApp:=CreateOleObject(‘Excel.Application’);
WorkBook:=CreateOleObject(Excel.Sheet’);
Except
Application.MessageBox(‘你的机器没有安装Microsoft Excel’,
’使用Microsoft Excel’,MB_OK+MB_ICONWarning);
Exit;
End;
Try
ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);
WorkBook:=eclApp.workbooks.Add;
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);
WorkBook.close;
ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);
Workbook:=eclApp.WorkBooks.Open(xlsFileName);
EclApp.Cells(1,4):=’Excel文件类型’;
If MessageDlg(xlsFileName+’已经被修改,是否保存?’,
mtConfirmation,[mbYes,mbNo],0)=mrYes then
WorkBook.Save
Else
WorkBook.Saved:=True; {放弃保存}
Workbook.Close;
EclApp.Quit; //退出Excel Application
{释放Variant变量}
eclApp:=Unassigned;
except
ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);
WorkBook.close;
EclApp.Quit;
{释放Variant变量}
eclApp:=Unassigned;
end;
end;
end.
了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
在DELPHI中操作Excel
□ 曾剑平
在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?
我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。
关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。
因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。
下面,以Delphi为例,说明这种调用方法。
Unit excel;
Interface
Uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,
{ ComObj是操作OLE对象的函数集}
Type
TForm1=class(TForm)
Button1:TButton;
Procedure Button1Click(Sender:Tobject);
Private
{ Private declaration}
Public
{ Public declaration }
end;
var
Form1:Tform1;
Implementation
{$R *.DFM}
procedure TForm1.Button1Click(sender:Tobject);
var
eclApp,WordBook:Variant; {声明为OLE Automation对象}
xlsFileName:string;
begin
xlsFileName:=’ex.xls’;
try
{创建OLE对象:Excel Application与WordBook}
eclApp:=CreateOleObject(‘Excel.Application’);
WorkBook:=CreateOleObject(Excel.Sheet’);
Except
Application.MessageBox(‘你的机器没有安装Microsoft Excel’,
’使用Microsoft Excel’,MB_OK+MB_ICONWarning);
Exit;
End;
Try
ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);
WorkBook:=eclApp.workbooks.Add;
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);
WorkBook.close;
ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);
Workbook:=eclApp.WorkBooks.Open(xlsFileName);
EclApp.Cells(1,4):=’Excel文件类型’;
If MessageDlg(xlsFileName+’已经被修改,是否保存?’,
mtConfirmation,[mbYes,mbNo],0)=mrYes then
WorkBook.Save
Else
WorkBook.Saved:=True; {放弃保存}
Workbook.Close;
EclApp.Quit; //退出Excel Application
{释放Variant变量}
eclApp:=Unassigned;
except
ShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);
WorkBook.close;
EclApp.Quit;
{释放Variant变量}
eclApp:=Unassigned;
end;
end;
end.
了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
#5
EXCEL的操作有多种方法,最常用的是通过OLE方式
具体方法请搜以前帖子
具体方法请搜以前帖子
#6
//use comobj ,要放一个savedialog
procedure TRemind_F.Btn1Click(Sender: TObject);
var
excelApp,WorkBook:olevariant;
xlsFileName:string;
i,j:integer;
begin
if dlgSave1.Execute then
begin
xlsFileName:=dlgSave1.FileName;
end else
begin
Exit;
end;
try
excelApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.Sheet');
except
Application.MessageBox('系统没有安装Microsoft Excel','Microsoft Excel',MB_OK+MB_ICONWarning);
Exit;
end;
try
//列名,字段名
WorkBook:=excelApp.workbooks.Add;
for i:=0 to dbg1.Columns.Count-1 do
begin
excelApp.Cells(1,i+1):=dbg1.Columns[i].Title.Caption;
end;
dbg1.DataSource.DataSet.First;
j:=2;
while not dbg1.DataSource.DataSet.Eof do
begin
for i:=0 to dbg1.Columns.Count-1 do
begin
excelApp.Cells(j,i+1):=dbg1.Fields[i].Value;
end;
dbg1.DataSource.DataSet.Next;
inc(j);
end;
WorkBook.SaveAS(xlsFileName);
WorkBook.close;
except
ShowMessage('文件导出失败!');
Exit;
end;
Application.MessageBox('保存成功!','恭喜',MB_OK + MB_ICONINFORMATION);
end;
#7
一:用Ole自动化服务,创建一个OLE自动化对像
二:用第三方控件,如Ehlib,dev express
二:用第三方控件,如Ehlib,dev express
#8
没那么烦的,开头uses cxgridexportlink;
事件中
procedure TfrmDaGongYiZhiZuo.cxButton5Click(Sender: TObject);
var
filename:string;
begin
if SaveDialog1.Execute then
begin
filename:=SaveDialog1.FileName;
ExportGridToExcel(filename,cxGrid2,True,True,True,'xls');
showmessage('数据导出成功!');
end;
end;
事件中
procedure TfrmDaGongYiZhiZuo.cxButton5Click(Sender: TObject);
var
filename:string;
begin
if SaveDialog1.Execute then
begin
filename:=SaveDialog1.FileName;
ExportGridToExcel(filename,cxGrid2,True,True,True,'xls');
showmessage('数据导出成功!');
end;
end;
#9
EXCEL的操作有多种方法,最常用的是通过OLE方式.6楼的就是一个简单的例子。仔细看一下。
#10
同意!!!!!!!!!!!!!!!!
#11
前提要安装什么控件?
#12
DEPHI第三方控件cxgrid,你可以上网直接下载用第三方控件包,组件,bpl,什么的,以后编程都会有很多规律性的东西,第三方控件会把很多代码写好的,你直接引用就行了,不像DEPHI自带的控件,真是写的累死了
#13
你这个好像要装cxGrid吧。
#14
procedure DBGridExportData(DBGridName: TDBGrid); //DBGrid导入Excel
var
myexcel: Variant;
workbook: olevariant;
worksheet: olevariant;
i, j, n, t: Integer;
SaveDialog: TSaveDialog;
xlsFileName: string;
begin
if not DBGridName.DataSource.DataSet.Active then Exit;
SaveDialog := TSaveDialog.Create(Application);
SaveDialog.DefaultExt := '.xls';
SaveDialog.Filter := 'Excel文件|*.xls|所有文件|*.*';
if SaveDialog.Execute then
begin
xlsFileName := SaveDialog.FileName;
//xlsFileName := 'apws.xls';
try
try
myexcel := createoleobject('excel.application'); //
myexcel.application.workbooks.add;
myexcel.caption := '批发市场导出数据';
workbook := myexcel.application.workbooks[1];
worksheet := workbook.worksheets.item[1];
except
showmessage('不能建立 EXCEL !' + #13#10 + '请检查是否已经安装了 excell.');
abort;
exit;
end;
i := 1;
j := 1;
for n := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[n].Visible then
begin
worksheet.cells(i, j) := DBGridName.Columns[n].Title.Caption;
j := j + 1;
end;
end;
with DBGridName.DataSource.DataSet do
begin
First;
while not Eof do
begin
inc(i);
n := 0;
for j := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[j].Visible then
begin
t := j - n;
if isNumericEx(fieldbyname(DBGridName.Fields[j].FieldName).AsString) then
worksheet.cells[i, t + 1] := '''' + (fieldbyname(DBGridName.Fields[j].FieldName).AsString)
else
worksheet.cells[i, t + 1] := (fieldbyname(DBGridName.Fields[j].FieldName).AsString);
end
else
inc(n);
end;
Next;
end;
end;
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否确定进行替换?' + #13 + #10 + #13 + #10 +
'若选择"取消",则将在当前目录中' + #13 + #10 +
'生成名为apwstemp.xls的临时文件', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
workbook.SaveAs(xlsFileName);
workbook.Close;
myexcel.Quit;
myexcel := Unassigned;
end
else
begin
if FileExists(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls')) then
begin
DeleteFile(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls'));
end;
WorkBook.SaveAs(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls');
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end
else
begin
WorkBook.SaveAs(xlsFileName);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
except
Application.MessageBox('不能正确操作Excel文件!' + #13 + #10 + #13 + #10 + '可能是該文件已被其他程序打开, 或系統错误',
'警告', MB_OK + MB_ICONSTOP + MB_SYSTEMMODAL);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end;
end;
var
myexcel: Variant;
workbook: olevariant;
worksheet: olevariant;
i, j, n, t: Integer;
SaveDialog: TSaveDialog;
xlsFileName: string;
begin
if not DBGridName.DataSource.DataSet.Active then Exit;
SaveDialog := TSaveDialog.Create(Application);
SaveDialog.DefaultExt := '.xls';
SaveDialog.Filter := 'Excel文件|*.xls|所有文件|*.*';
if SaveDialog.Execute then
begin
xlsFileName := SaveDialog.FileName;
//xlsFileName := 'apws.xls';
try
try
myexcel := createoleobject('excel.application'); //
myexcel.application.workbooks.add;
myexcel.caption := '批发市场导出数据';
workbook := myexcel.application.workbooks[1];
worksheet := workbook.worksheets.item[1];
except
showmessage('不能建立 EXCEL !' + #13#10 + '请检查是否已经安装了 excell.');
abort;
exit;
end;
i := 1;
j := 1;
for n := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[n].Visible then
begin
worksheet.cells(i, j) := DBGridName.Columns[n].Title.Caption;
j := j + 1;
end;
end;
with DBGridName.DataSource.DataSet do
begin
First;
while not Eof do
begin
inc(i);
n := 0;
for j := 0 to DBGridName.FieldCount - 1 do
begin
if DBGridName.Columns[j].Visible then
begin
t := j - n;
if isNumericEx(fieldbyname(DBGridName.Fields[j].FieldName).AsString) then
worksheet.cells[i, t + 1] := '''' + (fieldbyname(DBGridName.Fields[j].FieldName).AsString)
else
worksheet.cells[i, t + 1] := (fieldbyname(DBGridName.Fields[j].FieldName).AsString);
end
else
inc(n);
end;
Next;
end;
end;
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否确定进行替换?' + #13 + #10 + #13 + #10 +
'若选择"取消",则将在当前目录中' + #13 + #10 +
'生成名为apwstemp.xls的临时文件', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
workbook.SaveAs(xlsFileName);
workbook.Close;
myexcel.Quit;
myexcel := Unassigned;
end
else
begin
if FileExists(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls')) then
begin
DeleteFile(PChar(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls'));
end;
WorkBook.SaveAs(ExtractFileDir(xlsFileName) + '\' + 'apwstemp.xls');
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end
else
begin
WorkBook.SaveAs(xlsFileName);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
except
Application.MessageBox('不能正确操作Excel文件!' + #13 + #10 + #13 + #10 + '可能是該文件已被其他程序打开, 或系統错误',
'警告', MB_OK + MB_ICONSTOP + MB_SYSTEMMODAL);
WorkBook.Close;
myexcel.Quit;
myexcel := Unassigned;
end;
end;
end;
#15
如果不是有特殊的要求,就用第三方控件,很方便.
我有的就是dev express
我有的就是dev express
#16
看6楼回复,不错例子
#17
楼上说的方法是对的>>>>>>>>>>>>>>>>>>>>>
我以前就是这样引用的>>>>>>>>>>>>>>>>>>>>>
#18
我曾经用过,好像是根据excel的格式写数据,当然只能写一个sheet,速度很快,用delphi提供的组件当数据很多时,超慢!!
#19
用文件流来写入excel,速度很快的,具体方法我忘了,你可以查查!!
#20
这贴子回有什么意思呢?一个月了,难道还没搞定。也不知道结贴