QT操作Excel学习记录
1、QAxBase是一个提供用来初始化和访问COM对象和Active空间的API抽闲类;
2、QAxObject是一个包装了COM对象的QObject。
3、QAxWidget是一个包装了ActiveX控件的QWidget。
4、QAxScriptManager /QAxScript和QAxScriptEngin提供一个Windows脚本解释嵌入的COM对象。
QAxBase类提供了初始化和访问COM对象的API。
如果COM对象实现了IDispatch接口,那么就可像使用Qt 属性和槽函数一样使用该对象的属性和方法。方法可以连接信号,而由对象的IDispatch实现而公开的属性可以通过Qt属性系统对其读写(在Qt对象模型中QObject的子类也是QObject,可以用QObject::setProperty()和QObject::property()写和读属性)。
QAxBase实现了COM数据类型和等价的Qt数据类型之间的透明转换。但一些COM类型没有对应的Qt数据结构。
受支持的COM数据类型列在下表的的第一列,第二列是有QObject属性函数一起使用Qt类型,第三列是用于生成信号的原型的Qt类型,最后一列是用于信号和槽的输出参数的Qt类型
1、初始化COM对象——使用QAxBase::setControl()或者直接把对象的名字传递到QAxBase子类的构造函数中,初始化一个COM对象。
设置control属性来初始化COM对象,如excel是连接excel控件
指定控件——设置该属性最有效的方法是使用注册组件的UUID;
第二个法子是使用注册控件的类型(包括或不包括版本号)
最慢但最简单的方法是使用控件的全称
对于不同的情况还有其他不同的方法。
bool setControl(const QStrig& )
2、访问COM对象的API
可以通过访问COM对象的Qt API来取代COM的数据类型
方法2、call-by-Name :用QAxBase::dynamicCall()、QAxBase::querySubObject() 和QObject::setProperty()、QObject::property() 能通过名字调用COM对象的方法和属性。
QVariant QAxBase::dynamicCall(const char *function , const QVariant &var1=QVraint(),...)
该成员方法调用COM对象的method方法,传递参数var1,var2,var,var4,var5,var6,var7,这个方法有返回值,则返回一个值,没有返回值或调用失败就返回一个无效的QVariant。
function必须是COM对象的方法的完整模型,类似于QObject::connect()的调用。
也可以传递参数在function这个字符串中
即:
excel->dynamicCall("SetVisible(bool Visible)","false"); //不显示窗体
excel->dynamicCall("SetVisible(false)");