读书人

Delphi DBGRid导出有关问题

发布时间: 2013-09-28 10:01:20 作者: rapoo

Delphi DBGRid导出问题
这是我在网上找的一个方法


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的列名。
[解决办法]
引用:
http://download.csdn.net/detail/lch0422/6256389

分 主要是解决 OPENOFFICE 的问题。XE或以上版本
[解决办法]
35行,Screen.Cursor := crHourGlass;
不要了

读书人网 >.NET

热点推荐