怎样快速将数据导入Excel

wbamboo 2002-12-14 05:14:45
目前,我采用CreateOleObject的方法将数据一行行导入创建的Excel.Application中,但就是速度太慢了.如果DBGrid中有几万记录,那导起来就是老牛拉破车.
请问各位有没有什么快速导入Excel的方法,最好能像F1Book的Write一样,瞬间就完事.
...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfmich 2002-12-20
  • 打赏
  • 举报
回复
[转载]利用剪贴板实现高速导出数据到Excel amei2000go(原作)

关键字 Excel



在很多的时候,我们需要将我们的数据导出到Excel中进行加工,在Access中有现成的工具可以实现
可是在Delphi中却偏偏没有,无论如何我们需要这么一个工具,那么,事不宜迟,细细一想,最好的方法莫过
于直接在程序中按照Excel的格式生成Excel文件,使用Ole技术直接调用Excel实例,由于第一种方法技术实现
过于复杂,好在一般的计算机上已经安装了Office,在此就第二种方法“抛一块砖”。
在此做一个示例以方便说明,我们考虑到导出数据有很多的情况是Master/Detail数据,因此就用两个
TQuery和一个TDataSource,如果有更多的层次,只需要增加TQuery和TDataSource即可,以下使用了两个TQuery
,分别是:qryMaster和qryDetail,一个TDataSource:dsSource;
步骤是:
1.建立一个Excel实例
2.创建一个工作表
3.创建一个TStringList,用来装数据
4.穷举数据表,将数据存入TStringList
5.将TStringList的数据复制到剪贴板
6.把剪贴板中的数据粘贴到Excel
本方法的优点在于:比逐条写入到Excel中的速度大大提高,我曾试过,在P3933,256M的机器上用普通
的方法,导出1000条数据大约需要2分钟,而该用本方法后只需要8秒。

function ToExcel():boolean;
var
y :integer;
tsList :TStringList;
s :string;
aSheet :Variant;
begin
result:=true;
Excel.Connect; // 打开Excel
Excel.Visible[0]:=true; // 显示Excel
Excel.Workbooks.Add(xlWBATWorksheet,0);
aSheet:=excel.Worksheets.Item[1];

tsList:=TStringList.Create;
try
try
with qryMaster do
begin
Open;
First;
While Not Eof do
begin
s:='';
for y:=0 to FieldCount-1 do
begin
s:=s+Fields[y].AsString+#9;
Application.ProcessMessages;
end;
tsList.Add(s);
// 从表
if qryDetail<>nil then
begin
with qryDetail do
begin
Open;
First;
while Not Eof do
begin
s:='';
for y:=0 to FieldCount-1 do
begin
s:=s+Fields[y].AsString+#9;
Application.ProcessMessages;
end;
tsList.Add(s);
next;
end;
end;
end;
next;
end;
Close;
end;
Clipboard.AsText:=tsList.Text;
except
result:=false;
end;
finally
tsList.Free;
end;

Excel.Disconnect;
aSheet.Paste;
MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_OK);
end;

xubeibei11 2002-12-20
  • 打赏
  • 举报
回复
up
caier 2002-12-20
  • 打赏
  • 举报
回复
另外一种方法:
先导成文本格式,用逗号分割
然后用excel打开
marf_cn 2002-12-20
  • 打赏
  • 举报
回复
顶!
jackie168 2002-12-20
  • 打赏
  • 举报
回复
up
waxi 2002-12-19
  • 打赏
  • 举报
回复
帮你up
+1哦
谢谢!!
kaidu 2002-12-19
  • 打赏
  • 举报
回复
学习
danna 2002-12-14
  • 打赏
  • 举报
回复
非常同意楼上!
zybegin 2002-12-14
  • 打赏
  • 举报
回复
用EhLib组件的SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,DBGridEh1,'c:\temp\file1.xls'
,False)方法,速度快。

5,388

社区成员

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

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