使用Qt的QAxObject将Excel文件转成CSV文本文件

注意:以下代码需要在GUI环境的程序中才能运行,否则 setControl() 将会报错。

#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;
}

你可能感兴趣的:(Qt,项目实战)