2011-07-14 6 views
3

私はQt(4.6.3)を使ってExcelシートを処理してその中のデータを処理しようとしています。 hereとしてQAxWidget excel("Excel.Application")を使用しようとしました。QtによるマルチスレッドExcel処理?

最初は単純な方法で試してみましたが、すべてうまくいきましたが、しばらくGUIがフリーズするので、別のQThreadに実装しようとしました。

他のスレッドでは、継承クラスをQWidgetから使用することはできません。 私もこの試みたwayが、とにかくランタイムエラーがあります。

は、ここに私のコードの抜粋です:私が間違ってやっている

void MainDialog::extractData() 
{ 
    QAxWidget excel("Excel.Application"); 
    excel.setProperty("Visible", false); 

    QAxObject * workbooks = excel.querySubObject("WorkBooks"); 
    workbooks->dynamicCall("Open (const QString&)", ui->lineEditAdress->text()); 
    QAxObject * workbook = excel.querySubObject("ActiveWorkBook"); 
    QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1); 

    // ... some work here... 

    workbook->dynamicCall("Close (Boolean)", false); 
    excel.dynamicCall("Quit (void)"); 
} 

何?仕事を終わらせる良い方法はありますか? ActiveXよりも良いアイデアですか?

ありがとうございました。

編集:

// ... 
CoInitialize(0); 
QAxObject excel("Excel.Application"); 
// ... 

、それが正常に動作します: Raivは、私はただ、スレッドの実行()で呼び出すQAxObject

QAxWidgetを置き換え、言ったように。

答えて

6

QAxWidgetの代わりにQAxObjectを試してみると、別のスレッドで動作します。そこにCoInitialize()を呼び出すことを忘れないでください。

+0

すぐにお返事いただきありがとうございます。 – jujulebulbe

関連する問題