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)");