出入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了一下。
分不多,希望大神能提供帮助,谢谢大神们。
请检查下你的电脑是否安装了一个叫“福昕阅读器”的垃圾软件!
https://blog.csdn.net/u010421580/article/details/18459923
补充说明:代码问题在于认为管理器的Excel.exe进程没有退出
同问。
亲测: 调用mpExcel->dynamicCall("Quit(void)")
WPS的et.exe进程可以顺利退出;
Office Excel 2007的EXCEL.exe,如果程序将EXCEL.exe主窗口显示出来,然后调用dynamicCall("Quit(void)")可以顺利退出EXCEL.exe。如果将EXCEL.exe主窗口隐藏,调用dynamicCall("Quit(void)")根本无法退出EXCEL.exe进程。