我正在使用带有 Excel 的 OleAutomation := CreateOleObject('Excel.Application'); 使用Excel.Replace和Excel.SaveAs功能。这些功能在我的问题中是必不可少的,我不能忽略它们。另一方面,我必须使用没有 OnCloseEvent的OleVariant类型。现在我的问题开始了:
首先是一个小概述:
**procedure OpenExcel begins**
Excel := CreateOleObject('Excel.Application');
//Excel opens a template and replaces placeholders
**procedure OpenExcel end**;
现在 Excel 已打开,所有占位符都已替换。在此程序之后,客户可以更改他的表格,纠正错误,...... 他想要关闭 Excel 或保存工作簿。
我的问题从这里开始:我想抓住客户关闭 Excel的那一刻。如果他的文档被保存,在 OleObject 被销毁之前,所有数据(路径或颜色之类的字符串和对象中的 id 之类的整数)都将提交给另一个名为 ELO(文档存档)的程序。但是 OleObjects 无法识别关闭或其他任何东西。
有解决此问题的解决方法吗?也许将对象链接到 OleObject 或进程本身以确定客户端何时关闭 Excel?
我查找了 \Ocx\Servers\excel200.pas 是否提供了一种方法,但我没有找到任何东西。我的同事建议我查看 office 文件夹并搜索 excel .tlb 文件,但它不存在。
如果上述问题无法解决
如果这不可能,有谁知道我如何将Excel.Replace和Excel.SaveAs与具有 OnClose 事件的对象一起使用?
我当前的替换代码如下:
//for all sheets in the workbook
for iSheet := 1 to Excel.Worksheets.Count do
begin
//activate the sheet
Excel.Worksheets[iSheet].Activate;
// this will be..
sWhat := %First String%;
//..replaced by..
sReplacement := %Second String%;
// warnings off (override message or if excel didn't find a sWhat)
Excel.Application.DisplayAlerts := False;
Excel.Cells.Replace(
What := sWhat,
Replacement := sReplacement,
LookAt := xlWhole,
SearchOrder := xlByRows,
MatchCase := False,
SearchFormat := False,
ReplaceFormat := False
);
//warnings on
Excel.Application.DisplayAlerts := True;
end;
SaveAs 方法类似。它只是发送一个命令,excel 本身可以像Excel.Cells.Replace一样处理。
我希望对我的问题的描述足够清楚,我的英语没有我想要的那么好..
提前致谢!