1. 程式人生 > >QT操作Excel學習記錄

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