请教:(Delphi & Excel & OLE & 速度)问题!

g961681 2005-07-04 06:29:47
要做一函数实现Delphi把cxGrid导出到Excel,并直接调用打印预缆功能。
功能先已经实现,但有一问题:速度。
每次调用该Excel,都得打开一次Excel,速度奇慢,不知道有什么方法可以加速!

(由于害怕该贴会石沉海底,先放88分。完成效果,再加200)
...全文
361 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
亮剑_ 2005-07-07
  • 打赏
  • 举报
回复
最快的肯定是直接写二进制文件了
Excel文件格式是一种BIFF格式(Binary File Format)

进一步的说明:
http://www.moon-soft.com/program/FORMAT/data/xls.txt
g961681 2005-07-06
  • 打赏
  • 举报
回复
这两天也看过些文章,的确都说如果用OLE方式的话,速度是肯定提不上去的。
而且,这样的方式一定要保证客户机器上一定已经装了excel才行啊!
亮剑_ 2005-07-06
  • 打赏
  • 举报
回复
还有用OLE时如果要设置格式的话,速度也会大受影响,所以除非十分必要,要快就不要设格式了
亮剑_ 2005-07-06
  • 打赏
  • 举报
回复
你怎么可以连续回复4次,不是不能超过3次吗

导EXCEL,OLE方式总归不可能有直接写文件快的,下面这个使用了Excel内置的取数据集功能,速度快一些,供您参考:)

procedure RsToExcel(AdoQuery1: TAdoQuery; ExcelFileName: string);
var
ExcelApp, Book, Sheet, Range, xlQuery: OleVariant;
begin
if not ADOQuery1.Active then
ADOQuery1.Open;

ExcelApp := CreateOleObject( 'Excel.Application' ); //创建
try
if ExcelApp.Workbooks.count < 1 then
ExcelApp.WorkBooks.Add;
Book := ExcelApp.Workbooks[1];
if Book.Worksheets.Count < 1 then
Book.Worksheets.Add;
Sheet := Book.Worksheets[1];

xlQuery := Sheet.QueryTables.Add(ADOQuery1.Recordset, Sheet.Range['A3']);
//xlQuery.FieldNames := false;
xlQuery.Refresh;

Sheet.SaveAs(ExcelFileName);
finally
Sheet := Unassigned;
Book := Unassigned;
if not VarIsEmpty(ExcelApp) then
ExcelApp.Quit;
ExcelApp := Unassigned;
if ADOQuery1.Active then ADOQuery1.Close;
end;
end;

paranoia190 2005-07-06
  • 打赏
  • 举报
回复
ExportGrid4ToExcel:这个东西好象本来就很慢!!
上千条就不怎么样了。
g961681 2005-07-06
  • 打赏
  • 举报
回复
没法顶了!!
g961681 2005-07-05
  • 打赏
  • 举报
回复
呵呵,谢谢!
顶~~~~
yangyi800827 2005-07-05
  • 打赏
  • 举报
回复
最近我也在用这个 导出Excel表的。
你用的是自带的servers控件 中的控件吗?
你的问题 太难了 ,我去请高手给你 看看吧。
等有结果了 一定来这里 回复你的。
g961681 2005-07-05
  • 打赏
  • 举报
回复
ding.............
g961681 2005-07-05
  • 打赏
  • 举报
回复
哎,又要石沉海底了吗?????????
g961681 2005-07-05
  • 打赏
  • 举报
回复
顶~~~~~~~~~~~~~~~
g961681 2005-07-04
  • 打赏
  • 举报
回复
其中的ExportGrid4ToExcel(sTmpFile, AGrid, True, True, False, 'tmp');是cx控件自带的。
调试的时候可以直接用一个现成的excel打开就可以了。
g961681 2005-07-04
  • 打赏
  • 举报
回复
贴出代码,望高手指点。
//打印数据表格
function PrintCxGrid(AGrid: TcxGrid): String;
var
sTmpFile: String;
eclApp, srcWorkBook: Variant;
begin
//生成临时文件的文件名
sTmpFile := ExtractFilePath(Application.ExeName) + 'E' + FormatDateTime('YYMMDDHHMMSS', Date + Time) + '.tmp';

//
try
Screen.Cursor := crHourGlass;

//
try
eclApp := CreateOleObject('Excel.Application');
srcWorkBook := CreateOleobject('Excel.Sheet');
except
Result := 'Microsoft Excel Not Support In Your System!';
Exit;
end;

//生成并打开临时文件
ExportGrid4ToExcel(sTmpFile, AGrid, True, True, False, 'tmp');
srcWorkBook := eclApp.WorkBooks.Open(sTmpFile);

//开始打印
srcWorkBook.ActiveSheet.PageSetup.Orientation := 2;
srcWorkBook.ActiveSheet.PageSetup.CenterHeader := '表头';
srcWorkBook.ActiveSheet.PageSetup.CenterFooter := '表尾';
eclApp.Visible := True;
srcWorkBook.ActiveSheet.PrintPreview;
finally
//退出Excel Application
eclApp.Quit;
eclApp := Unassigned;

//删除临时文件
if FileExists(sTmpFile) then
while FileExists(sTmpFile) do
DeleteFile(PChar(sTmpFile));

//
Screen.Cursor := crDefault;
end;
end;
内容概要:本文围绕“粒子群优化算法驱动的永磁同步电机电流环多参数协同辨识研究”,提出一种基于Simulink仿真实现的高精度参数辨识方法,旨在解决永磁同步电机(PMSM)在高性能电流控制中因关键参数(如电感、电阻、永磁磁链等)不准确或时变所导致的控制性能下降问题。研究构建了PMSM的精确数学模型,并在Simulink环境中搭建完整的电流环控制系统仿真平台,创新性地引入粒子群优化算法(PSO)对多个关键参数进行在线或多工况下的协同辨识。文中详细阐述了PSO算法的核心机制、适应度函数的设计原则(通常基于模型输出与实际响应的误差最小化)、参数初始化与收敛判据,并通过大量仿真实验验证了该方法在不同负载和运行条件下的辨识精度、收敛速度与强鲁棒性,有效提升了电流环的动态响应能力、抗干扰性和整体控制系统的稳定性。; 适合人群:具备电机控制理论、现代智能优化算法基础及MATLAB/Simulink仿真能力,从事电气工程、自动化控制、新能源汽车电驱动系统等领域的高校研究生、科研人员及企业研发工程师。; 使用场景及目标:①应用于高精度伺服驱动、电动汽车电驱系统等对电机参数敏感的高端装备中,实现控制器的精细化标定与自适应;②为智能优化算法在复杂非线性系统参数辨识领域的工程应用提供完整的仿真案例和技术范本;③服务于电机控制系统的故障诊断、性能评估及下一代自整定控制器的研发。; 阅读建议:建议读者结合提供的Simulink模型与MATLAB代码进行动手实践,重点剖析PSO算法与电机模型的耦合机制,深入理解适应度函数的构建逻辑,并可进一步尝试将该方法拓展至温度补偿、磁饱和等非线性因素的联合辨识,或迁移至其他类型的电机(如感应电机)控制中,以深化对数据驱动与模型驱动融合控制策略的理解。

5,943

社区成员

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

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