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)
答案 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,尽管它可能与您的特定用例无关。编写宏时,首选方法是检查特定对象是否支持服务,而不是检查对象实际是什么类型。