Reflection返回所有对象

时间:2017-08-30 10:52:48

标签: javascript libreoffice uno-automation-bridge

getType方法应返回一个对象,该对象表示传递给方法的项的类型:

var serviceManager = new ActiveXObject('com.sun.star.ServiceManager');
var desktop = serviceManager.createInstance("com.sun.star.frame.Desktop");
var document = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, []);
var coreReflection = serviceManager.createInstance("com.sun.star.reflection.CoreReflection");

// should return a type representing the com.sun.star.frame.Desktop type
var classInfo = coreReflection.getType(desktop);

但是,classInfo似乎始终包含com.sun.star.uno.XInterface类型:

// outputs com.sun.star.uno.XInterface
WScript.Echo(classInfo.getName());

即使我传入其他对象,输出也是一样的:

classInfo = coreReflection.getType(document);
WScript.Echo(classInfo.getName());

如何找出实际类型?

(最初发布于ask.libreoffice

1 个答案:

答案 0 :(得分:0)

我相信你正在寻找"实施名称"而不是"接口类型名称。"

以下代码改编自XrayTool会产生消息com.sun.star.comp.framework.Desktop(此处comp可以perhaps be ignored)。

WScript.Echo(desktop.ImplementationName)

还有一种很好的方法,但只适用于Basic。

obj = createUnoService("com.sun.star.frame.Desktop")
MsgBox obj.DBG_Properties

这将产生一条长信息,从Properties of object "com.sun.star.frame.Desktop"开始。

最后,不要忘记supportsService,尽管它可能与您的特定用例无关。编写宏时,首选方法是检查特定对象是否支持服务,而不是检查对象实际是什么类型。