使用Qt的QAxObject类基于“Microsoft Excel 2007”和“WPS表格”做二次开发(以下将两者称为Excel)。以下代码在基于“WPS表格”二次开发下工作正常,et.exe进程(WPS表格进程)能正常退出。在我开发电脑上,以下代码基于“Microsoft Excel 2007”也工作正常,能到达预期效果。

但是,提交到测试人员处却发现,以下代码基于“Microsoft Excel 2007”工作不正常。不正常情况有二:

当 mpExcel->setProperty("Visible", false);   Excel软件设置为不可见

其一:mpWorkbooks->dynamicCall("Open(const QString&)", QVariant(msXlsFile))

提示QAxBase: Error calling IDispatch member Open: Unknown error

其二:mpExcel->dynamicCall("Quit()")

EXCEL.exe进程根本没有退出(任务管理器中仍然可见)。

::OleInitialize(0);QString msXlsFile("E:/QtWrokSpace/Bin/V1.0.xls");
//QAxObject *mpExcel = new QAxObject("et.application");
QAxObject *mpExcel = new QAxObject("excel.application");
mpExcel->setProperty("Visible", false);QAxObject *mpWorkbooks = mpExcel->querySubObject("WorkBooks");// 1.打开表格文件(注意:表格文件采用绝对路径)
mpWorkbooks->dynamicCall("Open(const QString&)", QVariant(msXlsFile));// 2.查询当前活动表格文件(即Open中打开的文件)对象‘ActiveWorkBook’
QAxObject *mpWorkbook = mpExcel->querySubObject("ActiveWorkBook");// 3.切换到指定的sheet
QAxObject *mpWorksheet = mpWorkbook->querySubObject("WorkSheets(int)", 1);// 4.获取该sheet的数据范围(可以理解为有数据的矩形区域)对象
QAxObject *usedrange = mpWorksheet->querySubObject("UsedRange");// 5.获取行/列对象
QAxObject *rows = usedrange->querySubObject("Rows");
QAxObject *columns = usedrange->querySubObject("Columns");// 6.开始的行/列索引
int mnStartRow = usedrange->property("Row").toInt();
int mnStartColumn = usedrange->property("Column").toInt();
// 7.该sheet的总行/列数
int mnRowCount = rows->property("Count").toInt();
int mnColumnCount = columns->property("Count").toInt();// 8.关闭workbook
mpWorkbook->dynamicCall("Close(Boolean)", false);
// 9.退出Excel
mpExcel->dynamicCall("Quit()");// 10.释放COM对象
delete rows;
delete columns;
delete usedrange;
delete mpWorksheet;
delete mpWorkbook;
delete mpWorkbooks;
delete mpExcel;::OleUninitialize();

有人说是因为COM对象没有释放,某些引用计数不为0,造成Quit()后EXCEL.exe不会退出!于是仔细调整代码,但凡用到querySubObject()查询到的指针都delete掉。结果仍然是EXCEL.exe进程无法退出,Open(.xls)失败!

从百度到Google,两天翻了好多相关字眼的文章、博客、论坛、Wiki、A&Q,各种原因方案没有一个能解决上述问题!

在接近崩溃边缘,在百度里“QAxBase: Error calling IDispatch member Open: Unknown error”查了这么句提示。在以前不屑一顾的贴吧里面找到了答案!

http://tieba.baidu.com/p/4427699896

根据这个不起眼的信息,去测试人员电脑检查,果真发现“福昕PDF阅读器”(真不知道是哪来的垃圾软件),更让人无语的是一群测试个个多装了这玩意!

兜兜转转谁知道是一个无名软件引发的不解Bug之谜!

题外话:

在卸载“福昕PDF阅读器”时,出现下面一幕,莫名的让人觉得开发这个软件的公司是多么垃圾!

【Qt】有一种Bug叫“麻烦制造者——福昕PDF阅读器”相关推荐

  1. 小功能解决小麻烦,福昕PDF阅读器仿真放大镜功能详解

    在日常工作学习及娱乐总有遇到PDF文档不放大字看不清楚,放大了又需要拖来拖去的情况,十分的麻烦.其实这种麻烦只需要一个小功能就可以解决,那就是福昕阅读器中的"仿真放大镜",使用起来 ...

  2. 基于MuPDF和Qt的PDF阅读器的开发

    基于MuPDF和Qt的PDF阅读器的开发 一.引言 设备上要渲染显示PDF文档,类似Adobe Reader.福昕阅读器等软件.如何去实现?Handling PDF这篇文档讨论介绍了在Qt应用程序中各 ...

  3. QT开发的pdf阅读器资料

    详细说明:基于QT的一款建议pdf阅读器,可以进行移植,可以再pc上运行.-Recommendations based on QT' s a pdf reader, can be transplant ...

  4. qt实现的pdf阅读器(二)--XpdfReader在linux下的编译

    目录 1.简介 2.需求说明 3.编译 3.3. 下载源码 3.2. 移植安装包和依赖库 3.2.1 准备工作 3.3.2 了解 3.3.3 编译并安装zlib 3.3.4 编译并安装libpng 3 ...

  5. 基于qt与mupdf库的pdf阅读器开发

    pdf阅读器 下载mupdf源码 编译mupdf源码 qt工程链接mupdf源码静态库 参照 mupdf/docs/examples/example.c 开发 mainwindows.ui mainw ...

  6. Qt 使用Poppler实现pdf阅读器

    开发环境 Qt5.5.1.Qt Creator 3.5.1 Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的. 需要用到Poppler开源库,下载地址如下 https://poppl ...

  7. Foxit pdf阅读器不及时释放文件的bug解决

    更少文章见我的博客:http://yanke23.tk 福昕阅读器 7.1.1免费版,系统为win8.1. 问题:如果打开多个标签,然后关闭其中一个,想要重命名或删除这个被关闭 的文件的话,是不行的, ...

  8. qt实现的PDF阅读器(四)——Quick

    1.前言说明 qt-pdf-viewer-library是PDF .js库的qml包装,可以再在WebView中呈现PDF文件. 这个库也适用于Android设备,它使用WebSocketServer ...

  9. 在打造 iPod 和 Nest 之后,这位被硅谷抛弃的「麻烦制造者」正在巴黎重建浪潮之巅

    「麻烦制造者」的舞台 在伦敦郊外的一处庄园,Tony Fadell 正在参加一场创始人论坛.宾客名单中有许多科技公司的创始人,也有拥有大英帝国勋章的初级军官.但实际上,这场会议的焦点人物是 Fadel ...

最新文章

  1. 常用的网络配置命令 ifconfig 所在的包
  2. 怎么把快捷键改成eclipse_Java IDE超好用的10个快捷键
  3. bal插口_EBS R12各模块接口表大全
  4. [转载]:TRY...CATCH (Transact-SQL)
  5. JDK 12的String :: transform方法的简要但复杂的历史
  6. Java多线程——重入锁ReentrantLock源码阅读
  7. python函数定义及调用-Python:函数定义和调用时都加*,有什么作用?
  8. Sqlserver自动优化
  9. 【翻译】3D Bounding Box Estimation Using Deep Learning and Geometry
  10. Intellij IDEA2017安装破解
  11. 神经网络在线和离线的区别,神经网络网站
  12. mysql监控工具-PMM,让你更上一层楼(上)
  13. 计算机毕业设计之疫情防疫信息化管理系统
  14. 基于C# winform实现随机点名小工具(支持csv导入)
  15. 1月1号开始租房一年期到几号_先承认我迷糊。现在请帮忙,租房合同中从7月1日起到次年的几月几日是一年日期?是6月31日还是7月31日...
  16. 怎么把wps转换成word
  17. 家谱宗族网站源码_家谱管理系统(源代码)
  18. java的时间日期类_Java基础学习:日期时间类
  19. CORBA的简单介绍及HelloWorld
  20. android 消息轮训,Android消息机制Handler,有必要再讲一次

热门文章

  1. 5月15日----疯狂猜成语-----三周第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜...
  2. 3D全景具备哪些特点?又有哪些有趣的交互功能?
  3. 来点干货!3招Python 处理CSV、JSON和XML数据的简便方法!
  4. android 常见数据存储
  5. 帆软如何把两个表格分页显示
  6. 美国计算机科学专业硕士毕业薪,美国硕士毕业生薪水最高的10种专业
  7. Typora+PicGo图床配置(超详步骤教学)
  8. Fragment详解(一)
  9. 【Android Fragment】Fragment基础
  10. H.264裸流文件中获取每一帧数据