这是我在网上找的一个方法unit DBGRIDexel;interface
uses ComObj,DBGrids,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls; function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog;SaveFileName: string): boolean;implementation
function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog ;SaveFileName: string): boolean;
var
c,r,i,j: integer;
app: Olevariant;
TempFileName, ResultFileName: string;
begin
try
result := True;
app := CreateOLEObject('Excel.application');
except
Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
result := False;
exit;
end; SaveDialog.DefaultExt := '.xls';
SaveDialog.FileName:=SaveFileName; if SaveDialog.Execute then
TempFileName := SaveDialog.FileName
else
Exit; app.Workbooks.add;
app.Visible := false;
Screen.Cursor := crHourGlass; DBGrid.DataSource.DataSet.First;
c:=DBGrid.DataSource.DataSet.FieldCount;
r:=DBGrid.DataSource.DataSet.RecordCount; Application.ProcessMessages; for i:=0 to c-1 do
begin
app.ActiveSheet.Columns[i+1].ColumnWidth:=10;//设置格宽度
app.cells(1,1+i):=DBGrid.DataSource.DataSet.Fields[i].DisplayLabel;
end; for j := 1 to r do
begin
for i := 0 to c - 1 do
begin
app.cells[j+1,3].numberformatlocal:='@';//设置成文本
app.cells(j+1,1+i):=DBGrid.DataSource.DataSet.Fields[i].AsString;
end;
DBGrid.DataSource.DataSet.Next;
end; ResultFileName := TempFileName; if ResultFileName = '' then
ResultFileName := '数据导出'; if FileExists(TempFileName) then
DeleteFile(TempFileName); app.Activeworkbook.saveas(TempFileName);
app.Activeworkbook.close(false);
app.quit;
app := unassigned;
end;end.导出文件是可以,但是存在3个问题。不知道怎么解决。
1. 导出的时候无法选择文件类型。SaveDialog打开时,没有文件类型的选项。都是空。
2.导出文件的时候一直显示为正在导出的状体。好像有什么都懂没结束一样。鼠标图标显示漏斗状,但是做其它操作时可以的。没有什么影响,就是好像一直在导出。但是实际已经完成了。还可以吧导出文件给打开。
3.导出文件的表头。全是数据库的字段名,而不是DBGrid的列名。
uses ComObj,DBGrids,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls; function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog;SaveFileName: string): boolean;implementation
function ExportDBGrid(DBGrid: TDBGrid; SaveDialog:TSaveDialog ;SaveFileName: string): boolean;
var
c,r,i,j: integer;
app: Olevariant;
TempFileName, ResultFileName: string;
begin
try
result := True;
app := CreateOLEObject('Excel.application');
except
Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
result := False;
exit;
end; SaveDialog.DefaultExt := '.xls';
SaveDialog.FileName:=SaveFileName; if SaveDialog.Execute then
TempFileName := SaveDialog.FileName
else
Exit; app.Workbooks.add;
app.Visible := false;
Screen.Cursor := crHourGlass; DBGrid.DataSource.DataSet.First;
c:=DBGrid.DataSource.DataSet.FieldCount;
r:=DBGrid.DataSource.DataSet.RecordCount; Application.ProcessMessages; for i:=0 to c-1 do
begin
app.ActiveSheet.Columns[i+1].ColumnWidth:=10;//设置格宽度
app.cells(1,1+i):=DBGrid.DataSource.DataSet.Fields[i].DisplayLabel;
end; for j := 1 to r do
begin
for i := 0 to c - 1 do
begin
app.cells[j+1,3].numberformatlocal:='@';//设置成文本
app.cells(j+1,1+i):=DBGrid.DataSource.DataSet.Fields[i].AsString;
end;
DBGrid.DataSource.DataSet.Next;
end; ResultFileName := TempFileName; if ResultFileName = '' then
ResultFileName := '数据导出'; if FileExists(TempFileName) then
DeleteFile(TempFileName); app.Activeworkbook.saveas(TempFileName);
app.Activeworkbook.close(false);
app.quit;
app := unassigned;
end;end.导出文件是可以,但是存在3个问题。不知道怎么解决。
1. 导出的时候无法选择文件类型。SaveDialog打开时,没有文件类型的选项。都是空。
2.导出文件的时候一直显示为正在导出的状体。好像有什么都懂没结束一样。鼠标图标显示漏斗状,但是做其它操作时可以的。没有什么影响,就是好像一直在导出。但是实际已经完成了。还可以吧导出文件给打开。
3.导出文件的表头。全是数据库的字段名,而不是DBGrid的列名。
解决方案 »
- 散分庆祝:时隔一年,CnWizards V1.0.0.638发布, 支持XE3,你还记得这个好东西么
- 报表打印
- 有人在抵制北京奥运,投票去
- 通过inputbox输入指定的文字,监控文字?
- 求教关于URLDownloadToFile函数不能下载未在浏览器中浏览过的页面问题
- 请教:创建窗体的问题,谢谢!(一个面世题目)
- delphi程序员的工作问题
- (help me!!!)在Database Desktop中建立的paradox表如何添加到ODBC和BDE中
- 关于InputBox函数
- chechy进来,问2个问题.
- 代码被编译器优化了?【散分过国庆】
- AlphaControls、VCLSkin控件运用后窗口关闭时报内存错误
使用的是D7 没用XE
不要了
刚才在别的帖子找到一个很好的类,但是还是有些问题。能请问下嘛?已经给你留言了
估计跟我找的类一样。这个类不能处理复杂的逻辑,只是速度很快。。
但我导出来用OPENOFFICE居然中文乱码, WPS、MS 是正常的。
在研究中