我正在使用TOleContainer
组件构建一个 Delphi (Delphi 6)程序,它加载了一个Excel文件:
MyOleContainer.CreateObjectFromFile('MyFilePath',False);
字符串
我已经将MyFilePath
添加到Excel的受信任位置,这就是为什么我可以在Windows资源管理器中双击打开此Excel文件而没有任何安全警告,尽管该文件包含宏。但是CreateObjectFromFile
会发出Excel的安全对话框,其中包含以下消息:
Microsoft Excel安全声明
Microsoft Office发现了一个潜在的安全问题。
Microsoft已阻止宏运行,因为此文件的源不可信。
文件路径:Book1
我该怎么办?我正在阅读步骤,但我觉得没有描述关于加载TOleContainer
的场景。Book1
文本表明TOleContainer
可能会将原始Excel文件复制到某个临时位置。但是我将整个C:
和D:
驱动器(带子目录)包含到我的受信任位置,但是在TOleContainer
中加载时的安全警告仍然存在,而双击打开时没有警告。
在加载TOleContainer
时,有什么方法可以避免此安全警告?
procedure TOleContainer.CreateObjectFromFile(const FileName: string;
Iconic: Boolean);
var
CreateInfo: TCreateInfo;
begin
CreateInfo.CreateType := ctFromFile;
CreateInfo.ShowAsIcon := Iconic;
CreateInfo.IconMetaPict := 0;
CreateInfo.FileName := FileName;
CreateObjectFromInfo(CreateInfo);
end;
procedure TOleContainer.CreateObjectFromInfo(const CreateInfo: TCreateInfo);
begin
DestroyObject;
try
CreateStorage;
with CreateInfo do
begin
case CreateType of
ctNewObject:
OleCheck(OleCreate(ClassID, IOleObject, OLERENDER_DRAW, nil,
Self, FStorage, FOleObject));
ctFromFile:
OleCheck(OleCreateFromFile(GUID_NULL, PWideChar(FileName), IOleObject,
OLERENDER_DRAW, nil, Self, FStorage, FOleObject));
ctLinkToFile:
OleCheck(OleCreateLinkToFile(PWideChar(FileName), IOleObject,
OLERENDER_DRAW, nil, Self, FStorage, FOleObject));
ctFromData:
OleCheck(OleCreateFromData(DataObject, IOleObject,
OLERENDER_DRAW, nil, Self, FStorage, FOleObject));
ctLinkFromData:
OleCheck(OleCreateLinkFromData(DataObject, IOleObject,
OLERENDER_DRAW, nil, Self, FStorage, FOleObject));
end;
FDrawAspect := DVASPECT_CONTENT;
InitObject;
FOleObject.SetExtent(DVASPECT_CONTENT, PixelsToHimetric(
Point(ClientWidth, ClientHeight)));
SetDrawAspect(ShowAsIcon, IconMetaPict);
UpdateView;
end;
except
DestroyObject;
raise;
end;
end;
型
此代码显示通过以下方式加载Excel文件:
OleCreateFromFile(GUID_NULL, PWideChar(FileName), IOleObject, OLERENDER_DRAW, nil, Self, FStorage, FOleObject)
型
...使用某种临时存储FStorage
(有单独的代码)。因此,从这个临时存储加载可能会对安全警告进行非常特殊的处理。
1条答案
按热度按时间shyt4zoc1#
我有一个非常类似的问题,一个自定义编写的应用程序,通过OLE调用Excel,并给我完全相同的错误对话框,因为你是上面引用。
在另一篇文章中,我发现了一种解决方法,那就是在启动我的自定义应用程序之前,先用一个单独的启用宏的电子表格打开Excel。OLE容器创建的电子表格然后顺利激活,因为宏已启用,因为宏已启用电子表格正在运行。
另一个提示是OLE容器工作表最初显示为不可读和不可编辑。但是,在工作表中单击鼠标右键可以选择“打开”工作表。一个完全可用的Excel版本出现在我这一点上。