2016-12-19 2 views
1

Я использую Qt activex (QAxObject) для чтения/записи файлов excel.Предотвращение сбоя приложения, когда excel не установлен при записи qt activex excel коды чтения/записи

QAxObject* excel = new QAxObject("Excel.Application", 0); 
QAxObject* workbooks = excel->querySubObject("Workbooks"); 
QAxObject* workBook = workbooks->querySubObject("Open(const QString&)", path); 
QAxObject* sheets = workBook->querySubObject("Worksheets"); 
QAxObject* sheet1 = sheets->querySubObject("Item(int)", 1); 
QAxObject* sheet2 = sheets->querySubObject("Item(int)", 2); 
//.... 

Мы знаем, что этот механизм использует excel и не работает на компьютерах, которые не установлены.

Если код работает на таких компьютерах (без установленного excel), программа сработает. Как я могу обнаружить в коде, что excel не установлен на ПК?

ответ

4

Вы проверяете, является ли книга NULL указателем. Как правило, вы можете проверить, является ли excel нулевым указателем перед его использованием.

QAxObject* excel = new QAxObject("Excel.Application", 0); 

if (excel) 
{ 
    QAxObject* workbooks = excel->querySubObject("Workbooks"); 

    if (workbooks) 
    { 
      QAxObject* workBook = workbooks->querySubObject("Open(const QString&)", path); 
      QAxObject* sheets = workBook->querySubObject("Worksheets"); 
      QAxObject* sheet1 = sheets->querySubObject("Item(int)", 1); 
      QAxObject* sheet2 = sheets->querySubObject("Item(int)", 2); 

      ... 
+0

'NULL' - вещь C. В C++ используйте 'nullptr' или' 0', если вы должны поддерживать совместимость с компиляторами pre-C++ 11. Однако в большинстве проектов тест 'if (ptr)' также является идиомой. Вы также можете не запускать новый блок для каждого теста, но возвращайтесь от функции всякий раз, когда тест терпит неудачу. –

Смежные вопросы