怎么样把查询的数据导出到EXCEL中,要求要快的,我现在有可是太慢了,要一条条处理!(100分)

  • 主题发起人 主题发起人 mtllyy
  • 开始时间 开始时间
M

mtllyy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样把查询的数据导出到EXCEL中,要求要快的,我现在有可是太慢了,要一条条处理!
 
你用的什么控件导出的,我原来用的是Express的Dbgrid控件,很快的,你在DBgrid中是
样的模样,导出到Excel中就是什么样的模样,很方便
 
具体点 如果是grid里的数据导出,可以用DXdbgrid
 
最快的办法:
with dbgrid.datasource.dataset do begin
first; memo1.clear;
while not eof do begin
str:='';
for i:=0 to fieldcount-1 do
str:=str+fiels.asstring+#9;
memo1.lines.add(str);
end;
meme1.copytoclipboard;

XL:=CreateOLEObject('Excel.Application');
XL.workbooks.Add;
XL.ActiveSheet.Paste;
XL.ActiveWorkBook.SaveAs (Filename, FileFormat);
这样好像是最快的


 
有没有控件可以发一个给我吗? ly5678@263.net.cn

或者twos兄能不能再贴详细一些啊?
 
大家快回答啊!
 
试试这个控件:
http://asp.6to23.com/bcbcn/control/dncontrol.asp?id=140
 
使用Infopower的wwDBGrid,可以很快捷的完成。
只要对属性:ExportOptions的 ExportType设定为wwgetSYLK 就行了。
 
ExcelQueryTable
 
to twos:
我试了一下,有中文乱码问题!如何解决???
 
完全没必要用额外什么
分析很多提供这种功能的控件或代码都是一行行做的,不是你想的那样
之所以慢,是因为你拷贝时没有做
ADataset.disablecontrols;
。。。。。
ADataset.enablecontrols;
所以数据显示控件数据在不停刷新显示,当然感觉慢了!

下面是我自己写过老代码,几万数据也不是很慢

//先执行AnalyzeDataSet函数,然后执行ExportData函数,AnalyzeDataSet里自己设置自己的数据类型过滤条件吧。

procedure AnalyzeDataSet(ExportData: TDataSet; FileName: string);
var
i: integer;
FieldCount: integer;
begin
FieldCount := ExportData.FieldCount;
for i := 0 to FieldCount - 1 do
try
case ExportData.Fields.DataType of
//常用的无法转换成字符串的数据,不过有些可以转换,如FTGUID,FTBYTES,FTAUTOINC等,自己看情况决定
ftUnknown, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftADT, ftArray, ftReference,
ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid:
begin
ExportData.Fields.DisplayLabel := 'invalidfield';
Raise Exception.Create('存在不支持的字段类型,这些字段将不能输出!');
end;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
end;


procedure ExportData(ExportData: TDataSet; FileName: string);
var
i: integer;
FieldCount: integer;
TxtFile: TFileStream;
CaptionLine: string;
RecLine: string;
Charactor: Char;
begin
ExportData.DisableControls;
TxtFile := TFileStream.Create(FileName, fmCreate or fmShareDenyWrite);
//write the label of dataset to disc file
TRY
FieldCount := ExportData.FieldCount;
for i := 0 to FieldCount - 1 do
begin
CaptionLine := FDataSet.Fields.DisplayLabel + #9;
TxtFile.Write(CaptionLine[1], Length(CaptionLine));
end;
Charactor := #10;
TxtFile.Write(Charactor, 1);
//write the data of dataset to disc file
ExportData.First;
while not ExportData.Eof do
begin
for i := 0 to FieldCount - 1 do
begin
RecLine := ExportData.Fields.AsString + #9;
TxtFile.Write(RecLine[1],Length(RecLine));
end;
Charactor := #10;
TxtFile.Write(Charactor, 1);
ExportData.Next;
end;
Finally
TxtFile.Free;
ExportData.EnableControls
End;
end;

 
CaptionLine := FDataSet.Fields.DisplayLabel + #9;

上句是不是有错误啊?
 
To twos:
我试了你的方法,为什么会将中文写成乱码?
 
还有没有高手回答啊?
 
http://www.myvc.net/dispbbs.asp?boardID=69&ID=1396
 
用sList:TStringList;
sList.SaveToFile();
100000条数据都不要5秒钟,我就是用的这种方法。
 
后退
顶部