#include <QDir>
#include <QAxObject>
#include <QScopedPointer>
#include <QDebug>
bool ExcelToCsvFile(const QString &excelFileName, const QString &csvFileName)
{
if (!QFile::exists(excelFileName))
return false;
// 当pApplication析构的时候会将其所有相关的子对象都清理
QScopedPointer<QAxObject> pApplication(new QAxObject());
// 设置连接Excel控件,需要在GUI的环境下才能成功
bool ok = pApplication->setControl("Excel.Application");
if (!ok)
return false;
pApplication->dynamicCall("SetVisible(bool)", false); // false表示不显示窗体
pApplication->setProperty("DisplayAlerts", false); // false表示不显示(输出)任何警告信息。
QAxObject *pWorkBooks = pApplication->querySubObject("Workbooks"); // Excel工作薄(对象)
if (pWorkBooks == 0)
return false;
QAxObject *pWorkBook = pWorkBooks->querySubObject("Open(const QString &)", excelFileName); // 打开一个Excel文件
if (pWorkBook == 0)
return false;
QAxObject *pSheets = pWorkBook->querySubObject("WorkSheets"); // Excel工作表集
if (pSheets == 0)
return false;
QAxObject *pSheet = pSheets->querySubObject("Item(int)", 1); // 得到指定索引的工作表
if (pSheet == 0)
return false;
// 另存为文件, 3: txt文件(空格分隔)| 6: csv文件(逗号分隔)
pSheet->dynamicCall("SaveAs(const QString&, int)", QDir::toNativeSeparators(csvFileName), 3);
pApplication->dynamicCall("Quit()");
return true;
}