Я пытаюсь обработать лист Excel, чтобы обработать данные в нем с помощью Qt (4.6.3).
Я пытался использовать QAxWidget excel("Excel.Application")
здесь здесь .
Сначала я попытался использовать его простым способом, все работает нормально, но графический интерфейс на некоторое время зависает, поэтому я попытался реализовать его в другом QThread
.
Как некоторые говорят, нельзя использовать унаследованные классы от QWidget
в других потоках, кроме основного.
Я также попробовал этот способ , но все равно есть ошибка во время выполнения.
Вот фрагмент моего кода:
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?
Спасибо.
Edit:
Как сказал Райв, я заменил QAxWidget
на QAxObject
Просто вызовите в run () потока:
// ...
CoInitialize(0);
QAxObject excel("Excel.Application");
// ...
и работает нормально.