我在创建StarOffice Desktop对象的实例时遇到了一些问题。
我使用下面的标准构造,但每当涉及到这一行时:StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
我的StarDesktop Variant保持未分配状态。我很确定代码是可以的,直到那里,但也许OpenOffice安装的东西搞砸了。
有没有办法检查com对象或有人有同样的问题,可以解决它...
uses
ComObj;
procedure OpenOfficeDocument;
var
StarOffice: Variant;
StarDesktop: Variant;
begin
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
// StarDesktop is always "unassigned"
....
是的,我知道。我应该更清楚地说明,我过于100%确定它能在正确的环境中正常工作。
但我的问题是它可能不起作用的原因。为什么'com.sun.star.frame.Desktop'
实例未分配。我没有选择/方式调试它...
投票让我失望有点不公平,我研究了一个小时而没有找到解释为什么它不起作用的东西。
或者如何以及在何处检查Office安装是否有问题(我已经卸载并重新安装了两次"
再一次,我知道这对其他人有用,通常对我有用,但我的系统出了问题,我想知道一些帮助,指出我在系统中可能出错的方向(而不是在代码中)示例...)
答案 0 :(得分:1)
是否在客户端上安装了OpenOffice? 不会抛出任何异常吗?
我正在使用Bernard Marcelly的Delphi 7 OOo tool,你可以看到他那样的代码;
var
OpenOffice, StarDesktop: Variant;
...
OpenOffice:= CreateOleObject('com.sun.star.ServiceManager');
if isNullEmpty(OpenOffice) then Raise Exception.Create('OpenOffice connection is impossible');
StarDesktop:= OpenOffice.createInstance('com.sun.star.frame.Desktop');
if isNullEmpty(Result) then Raise Exception.Create(Format('Impossible to create service : %s', ['com.sun.star.frame.Desktop']));
...
'一些常量转换为字符串'
因此,如果StarDesktop为null,则可能无法访问Oo Desktop服务。如果OpenOffice安装正确,某些功能可能会丢失,则必须设置选项。
答案 1 :(得分:1)
这对我有用(在我的申请中):
class procedure TOpenOffice.Connect;
begin
if IsConnected then
Exit;
try
FServiceManager := CreateOleObject('com.sun.star.ServiceManager');
except
FServiceManager := Null;
end;
if VarIsNull(FServiceManager) then
raise EOpenOfficeException.Create(StrConnectionFailed);
FDesktop := CreateService('com.sun.star.frame.Desktop');
FDispatchHelper := CreateService('com.sun.star.frame.DispatchHelper');
FIntrospection := CreateService('com.sun.star.beans.Introspection');
FReflection := CreateService('com.sun.star.reflection.CoreReflection');
end;
和
class function TOpenOffice.CreateService(const ServiceName: string): Variant;
begin
Result := FServiceManager.createInstance(ServiceName);
if VarIsNull(Result) then
raise EOpenOfficeException.CreateFmt(StrCouldNotCreateService,
[ServiceName]);
end;