【问题标题】:Prevent application crash when excel is not installed while writing qt activex excel read/write codes防止在编写qt activex excel读/写代码时未安装excel时应用程序崩溃
【发布时间】:2016-12-19 13:27:15
【问题描述】:

我正在使用 Qt activex (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),则程序会崩溃。如何在代码中检测到PC上没有安装excel?

【问题讨论】:

    标签: excel qt activex qaxobject


    【解决方案1】:

    您检查工作簿是否为 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 );
    
               ...
    

    【讨论】:

    • NULL 是 C 的东西。在 C++ 中,如果必须保持与 C++11 之前的编译器的兼容性,请使用 nullptr0。不过,在大多数项目中,if (ptr) 测试也是一个习惯用法。您可能还希望不在每个测试上启动一个新块,而是在测试失败时从函数返回。
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多