ClientDataSet中的数据保存到excel文件中. 点击导出按钮,填入文件名,点击保存,即可保存到**.xls中.不用出现excel的界面.数据有可能达到10万行,速度不能太慢,请大侠指点. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SmExport组件中有一个ExportToXLS组件直接写Excel文件的,不是采用OLE的方法速度很快 一、简单的方法ClientDateSet.SaveToFile('ExcelName.XLS');二、用内存流来TMemoryStream做或文件流TFileStream 基本思路: 1.创建一个文件. 4.用流对象将缓冲内的数据写入文件(WriteBuffer) 可以参考一下DXGrid的原代码 to rustle() :不能使用第三方控件to wangshenwang1:第一种方法不行,第二种方法能不能再说清楚点,最好有源码. To soyepp(大人物): OLE的方法总归很慢,直接写文件总归很复杂 如果不想用空间你就去看SmExport的源码... 以下是我把DBGRID中的记录保存到Excel中,你从ClientDataSet中只要稍改就OKprocedure GridToExcel(ADataSet : TADODataSet);var i, j, RowCnt : integer; XL, Xarr : Variant;begin Xarr := VarArrayCreate([1, ADataSet.FieldCount], VarVariant); XL := CreateOleObject('Excel.Application'); XL.WorkBooks.Add; XL.Visible := True; j := 1; RowCnt := ADataSet.FieldCount; with ADataSet do begin First; DisableControls; while not eof do begin i := 1; while i <= RowCnt do begin Xarr[i] := Fields[i-1].Value; Inc(i); end; XL.Range['A' + IntToStr(j), CHR(64 + RowCnt) + IntToStr(j)].Value := Xarr; Next; Inc(j); end; EnableControls; end; XL.Range['A1',CHR(64 + RowCnt) + IntToStr(j)].Select; XL.Selection.Font.Name := '宋体'; XL.Selection.Font.Size := 10; XL.selection.Columns.AutoFit; XL.Range['A1','A1'].Select;end; To; Rabbit_Lap() 你的方法没有问题,但是数据量大的时候会很慢,并且我不需要Excel程序界面,直接保存成*.xls最好了. 从com1中取出的数怎么看, 是从一个取重量的设备上取下来的 主从表问题 晕好几天了! 第一次用Clientdataset遇到的问题 listview控件 win2003为什么SQL Server无法连接 WIN 7装dephi 7 企业版 操作TRichEdit的问题,请帮忙? 一个类型转换问题,特急!!!!! 如何取得当前活动窗口的句柄? 如何用stringgrid显示记录中的不同类型数据? 我是新手。 cqzyf 接分 斑竹勿删 请看内容!!
二、用内存流来TMemoryStream做或文件流TFileStream
基本思路:
1.创建一个文件.
4.用流对象将缓冲内的数据写入文件(WriteBuffer)
可以参考一下DXGrid的原代码
to wangshenwang1:第一种方法不行,第二种方法能不能再说清楚点,最好有源码.
procedure GridToExcel(ADataSet : TADODataSet);
var
i, j, RowCnt : integer;
XL, Xarr : Variant;
begin
Xarr := VarArrayCreate([1, ADataSet.FieldCount], VarVariant);
XL := CreateOleObject('Excel.Application');
XL.WorkBooks.Add;
XL.Visible := True;
j := 1;
RowCnt := ADataSet.FieldCount;
with ADataSet do
begin
First;
DisableControls;
while not eof do
begin
i := 1;
while i <= RowCnt do
begin
Xarr[i] := Fields[i-1].Value;
Inc(i);
end;
XL.Range['A' + IntToStr(j), CHR(64 + RowCnt) + IntToStr(j)].Value := Xarr;
Next;
Inc(j);
end;
EnableControls;
end;
XL.Range['A1',CHR(64 + RowCnt) + IntToStr(j)].Select;
XL.Selection.Font.Name := '宋体';
XL.Selection.Font.Size := 10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].Select;
end;
你的方法没有问题,但是数据量大的时候会很慢,并且我不需要Excel程序界面,直接保存成*.xls最好了.