使用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;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值