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

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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。