在Qt中用QAxObject来操作Excel

最近写程序中需要将数据输出保存到Excel文件中。翻看《C++ GUI Programming with Qt 4》(Second Edition)发现可以在Qt中运用ActiveX控件,这真是太好了。

        看了很久教程也没有学会,毕竟是新手,平时也没学过ActiveX编程。一些在VB中可以方便使用的函数在Qt中都没法儿运行。网上的方法也很多解决不了问题,还会报错。也许是版本问题吧,Qt都更新了好几次了。所以只好自己多试几次。经过摸索我的方法如下:

首先在.pro文件中添加CONFIG += qaxcontainer

接着程序实现

QString filepath=QFileDialog::getSaveFileName(this,tr("Save orbit"),".",tr("Microsoft Office 2007 (*.xlsx)"));//获取保存路径
    if(!filepath.isEmpty()){
        QAxObject *excel = new QAxObject(this);
        excel->setControl("Excel.Application");//连接Excel控件
        excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体
        excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
 
        QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
        workbooks->dynamicCall("Add");//新建一个工作簿
        QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
        QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合
        QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1
        QAxObject *cellX,*cellY;
        for(int i=0;i<curRow;i++){
            QString X="A"+QString::number(i+1);//设置要操作的单元格,如A1
            QString Y="B"+QString::number(i+1);
            cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格
            cellY = worksheet->querySubObject("Range(QVariant, QVariant)",Y);
            cellX->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,0).toInt()));//设置单元格的值
            cellY->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,1).toInt()));
        }
 
        workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
        workbook->dynamicCall("Close()");//关闭工作簿
        excel->dynamicCall("Quit()");//关闭excel
        delete excel;
        excel=NULL;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中使用QAxObject来创建Excel文件的步骤如下: 首先,确保你已经安装了Microsoft Office软件,并且拥有Excel的许可证。 然后,你需要在Qt项目中添加以下代码段: ```cpp #include <QAxObject> ... QAxObject* excel = new QAxObject("Excel.Application", this); // 创建Excel应用程序对象 excel->dynamicCall("SetVisible(bool)", false); // 设置Excel应用程序不可见 QAxObject* workbooks = excel->querySubObject("Workbooks"); // 获取工作簿集合对象 QAxObject* workbook = workbooks->querySubObject("Add"); // 创建新工作簿 QAxObject* worksheets = workbook->querySubObject("Worksheets"); // 获取工作表集合对象 QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1); // 获取第一个工作表 QAxObject* cells = worksheet->querySubObject("Cells"); // 获取单元格集合对象 // 在A1单元格中写入数据 QAxObject* cell = cells->querySubObject("Item(int,int)", 1, 1); cell->dynamicCall("SetValue(const QVariant&)", "Hello, Excel!"); workbook->dynamicCall("SaveAs(const QString&)", "C:/path/to/excel.xlsx"); // 保存工作簿 workbook->dynamicCall("Close()"); // 关闭工作簿 excel->dynamicCall("Quit()"); // 退出Excel应用程序 ``` 上述代码中,我们使用QAxObject来创建Excel应用程序对象、工作簿、工作表、单元格等。你可以根据需要进行更多的操作,比如设置单元格格式、写入更多数据等。 最后,记得在结束程序前释放资源,可以在程序退出时执行以下代码: ```cpp delete excel; ``` 请确保将代码中的文件路径替换为你希望保存Excel文件的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值