数据导出到Excel的问题

goldcoast 2003-08-20 12:21:39
如何提高数据导出到Excel的速度?
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy_315 2003-08-20
  • 打赏
  • 举报
回复
1\dbgrid导入word,excel:
procedure SaveToExcelFile(DbgridName: TDbGrid);
var
XLApp: Variant;
Sheet: Variant;
WordApp,WordDoc,WordParagraph,WordRange,WordTable:variant;
I, J: Integer;
SaveDialog:TSaveDialog;
pBookMark: TBookMark;
StrSaveFile:string;
IntFileType:integer;
SltRec,SltCol :integer;
ColIndex,RowIndex : Integer;
begin
if dbgridname.DataSource.DataSet.IsEmpty then begin
messagebox(application.Handle,'没有任何数据,不能进行保存',
'警告',mb_ok);
abort;
end;
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := 'Microsoft Excel 文件|*.xls|Microsoft Word 文件|*.doc';
SaveDialog.Execute;
IntFileType:=SaveDialog.FilterIndex;
StrSaveFile:=SaveDialog.FileName;
if length(StrSaveFile)=0 then exit;
try
screen.Cursor:=crHourGlass;
case IntFileType of
1: begin
try
XLApp := CreateOleObject('Excel.Application');
XLApp.WorkBooks.Add(-4167);
XLApp.WorkBooks[1].WorkSheets[1].Name := '导出数据';
Sheet := XLApp.WorkBooks[1].WorkSheets['导出数据'];
J := 1;
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end;
with Dbgridname.DataSource.DataSet do
begin
pBookMark := GetBookmark;
DisableControls;
for I:=0 to dbgridname.Columns.Count-1 do
begin
if dbgridname.Columns[I].Visible=False then
Continue;
Sheet.Cells[J,I+1] := dbgridname.Columns[I].Title.Caption;
end;
Inc(J);
First;
while not Eof do begin
for I:=0 to dbgridname.Columns.Count-1 do begin
if dbgridname.Columns[I].Visible=False then
Continue;
Sheet.Cells[J,I+1] := trim(dbgridname.DataSource.DataSet.Fieldbyname(dbgridname.Columns[i].FieldName).asstring);
end;
Inc(J);
Next;
end;
GotoBookmark(pBookMark);
FreeBookmark(pBookMark);
EnableControls;
end;
XLApp.activeworkbook.saveas(StrSaveFile);
Application.ProcessMessages;
XLApp.Application.Quit;
end;
2: begin
try
if VarIsEmpty(WordApp) then
WordApp := CreateOleObject('word.Application');
WordDoc := WordApp.documents.add;
WordParagraph := WordApp.activedocument.paragraphs.add;
WordRange := WordParagraph.range;
WordRange.Font.Size := 15;
WordRange.Font.Name := '宋体';
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Word! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Word。','提示',MB_OK+MB_ICONINFORMATION);
Abort;
end;
SltRec:=dbgridname.SelectedRows.Count;
SltCol := 0;
for j := 0 to dbgridname.Columns.Count-1 do begin
if dbgridname.Columns[J].Visible then
SltCol := SltCol +1;
end;

WordRange := WordApp.ActiveDocument.Content;
WordTable:= WordApp.activedocument.tables.add(WordRange,SltRec + 1,SltCol);
ColIndex := 1;

for j := 0 to dbgridname.Columns.Count-1 do begin
if (dbgridname.Columns[j].Visible = false) then
Continue;
WordTable.Cell(1,ColIndex).Range.InsertAfter(dbgridname.Columns[j].Title.Caption);
ColIndex := ColIndex + 1;
end;

RowIndex := 2;
ColIndex := 1;
with dbgridname.DataSource.DataSet do begin
First;
pBookMark := GetBookmark;
DisableControls;
while not Eof do begin
for j := 0 to dbgridname.Columns.Count-1 do begin
if (dbgridname.Columns[j].Visible<>false) then
begin
WordTable.Cell(RowIndex,ColIndex).Range.InsertAfter
(dbgridname.DataSource.DataSet.Fieldbyname(dbgridname.Columns[j].FieldName).asstring);
ColIndex := ColIndex + 1;
end;
end;
RowIndex := RowIndex + 1;
ColIndex := 1;
Next;
end;
GotoBookmark(pBookMark);
FreeBookmark(pBookMark);
EnableControls;
end;
WordApp.activedocument.saveas(StrSaveFile);
Application.ProcessMessages;
WordApp.Application.Quit;
end;
end;
Finally
SaveDialog.Free;
screen.Cursor:=crDefault;
end;
end;
2\http://www.china-pub.com/computers/emook/1134/info.htm

sy_315 2003-08-20
  • 打赏
  • 举报
回复
我有从dbgrid中导入excel的例子,
不过都是规则的,没有表头那种,
换句话说是死的
要的话,email to:sy_315@163.com
popmailzjw 2003-08-20
  • 打赏
  • 举报
回复
收藏一下
JensiaTsang 2003-08-20
  • 打赏
  • 举报
回复
http://meicheng.org/cgi-bin/bbs/topic.cgi?forum=11&topic=36&show=50
这里有一个函数,可以参考一下
JensiaTsang 2003-08-20
  • 打赏
  • 举报
回复
我以前做过一人导数据的,有点慢,后来改用多线程,
感觉上还可以,骗过了用户,但骗不了自己,呵~~~

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧