在编写qt activex excel读/写代码时,防止未安装excel时应用程序崩溃

在编写qt activex excel读/写代码时,防止未安装excel时应用程序崩溃,excel,qt,activex,qaxobject,Excel,Qt,Activex,Qaxobject,我正在使用QtActiveX(QAxObject)来读/写excel文件 QAxObject* excel = new QAxObject( "Excel.Application", 0 ); QAxObject* workbooks = excel->querySubObject( "Workbooks" ); QAxObject* workBook = workbooks->querySubObject("Open(const QString&)", path); QAx

我正在使用QtActiveX(QAxObject)来读/写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),那么程序就会崩溃。如何在代码中检测到电脑上没有安装excel?

检查工作簿是否为空指针。根据经验,在使用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 );

           ...

NULL
是C语言的东西。在C++中,如果必须保持与前C 11 +编译器的兼容性,请使用<代码> NulLPTR < /代码>或<代码> 0代码>。然而,在大多数项目中,
if(ptr)
测试也是一种习惯用法。您也可能不希望在每个测试上启动新块,而是希望在测试失败时从函数返回。