leeliak 2018-07-18 03:58 采纳率: 0%
浏览 2822
已结题

Qt中通过QAxObject实现Excel读写,Excel进程无法退出

出入QT,当下想用QAxObject实现Excel读写,通过网上资料学习,目前已经实现所有功能相关代码开发,存在open后Excel进程退不掉的问题:先上代码
QString strFileName = tr("D:\\FilePath\\1402.xlsx");
QAxObject* m_pObjExcel;
QAxObject *m_pObjWorkbooks;
QAxObject *m_pObjWork;
QAxObject *m_pWorksheets;

m_pObjExcel = new QAxObject(tr("Excel.Application"), this);//建立excel操作对象
m_pObjExcel->setProperty("Visible", false);
m_pObjExcel->setProperty("DisplayAlerts", false);
m_pObjWorkbooks = m_pObjExcel->querySubObject("WorkBooks");

QFile xlsFile(strFileName);
if (xlsFile.exists())
{
    m_pObjWorkbooks->dynamicCall("Open(const QString&)", strFileName);
}
else
{
    m_pObjWorkbooks->dynamicCall("Add");
}
m_pObjWork = m_pObjExcel->querySubObject("ActiveWorkBook");
m_pWorksheets = m_pObjWork->querySubObject("WorkSheets");

if (m_pWorksheets)
{
    m_pWorksheets->dynamicCall("Close(Boolean)", false);
    delete m_pWorksheets;
    m_pWorksheets = NULL;
}
if (m_pObjWork)
{
    m_pObjWork->dynamicCall("Close(Boolean)", false);
    delete m_pObjWork;
    m_pObjWork = NULL;
}

if (m_pObjExcel != NULL)
{
    m_pObjWorkbooks->dynamicCall("Close(Boolean)", false); 
    delete m_pObjWorkbooks;
    m_pObjWorkbooks = NULL;

    m_pObjExcel->dynamicCall("Quit(void)");
    delete m_pObjExcel;
    m_pObjExcel = NULL;
}
每次只要打开文件存在调用到m_pObjWorkbooks->dynamicCall("Open(const QString&)", strFileName);任务管理器中的Excel.exe就无法退出,只要该行代码不被调用,就不会有问题(也就是说读无法退出写能正常退出)。
 上述delete 的调用时因为网上学习到说querySubObject返回值要自己delete,所以都delete了一下。
 分不多,希望大神能提供帮助,谢谢大神们。
  • 写回答

4条回答 默认 最新

  • shmiloveyou 2018-08-21 08:25
    关注

    请检查下你的电脑是否安装了一个叫“福昕阅读器”的垃圾软件!

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题