Qt使用COM操作Excel文件

工程文件*.pro加入
CONFIG += qaxcontainer

头文件:mainwidget.h


#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QAxObject>

class MainWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MainWidget(QWidget *parent = 0);
private:
    QAxObject *excelApp;//应用程序
    QAxObject *excelWorkbooks;//数据簿管理器
    QAxObject *excelWorkbook;//数据簿
    QAxObject *excelWorksheets;//数据表管理器
    QAxObject *excelWorksheet;//数据表
private:
    void CreateExcelApp(const QString &fileName);//新建Excel应用
    void AppendExcelWorksheet(const QString &sheetName);//添加工作表
    void WriteExcelWorksheet(int row,int column,const QString &dataStr);//向工作表中写数据
    void saveExcel(const QString &fileName);//保存Excel
    void FreeExcel();//释放Excel对象
signals:
   
public slots:
   
};

#endif // MAINWIDGET_H


源文件:mainwidget.cpp


#include "mainwidget.h"
#include <QFile>
#include <QDir>
MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent)
{
    CreateExcelApp("D:/Datas.xls");//创建文件
    WriteExcelWorksheet(1,1,"Hello");
    saveExcel("D:/Datas.xls");
    FreeExcel();
}
//创建Excel应用,创建Excel工作簿,创建Excel工作表
void MainWidget::CreateExcelApp(const QString &fileName)
{
    excelApp = new QAxObject(this);
    excelApp->setControl("Excel.Application");//连接Excel控件
    excelApp->dynamicCall("SetVisable(bool)",false);//不显示窗体
    excelApp->setProperty("DisplayAlerts",false);//不显示警告
    //
    excelWorkbooks = excelApp->querySubObject("Workbooks");
    QFile file(fileName);
    if(file.exists()==true)
    {
        excelWorkbook = excelWorkbooks->querySubObject("Open(const QString &)", fileName);//打开Excel文件
    }
    else
    {
        excelWorkbooks->dynamicCall("Add");//添加工作簿
        int count = excelWorkbooks->property("Count").toInt();//获取工作簿数目
        if(count >= 1)
        {
            excelWorkbook = excelWorkbooks->querySubObject("Item(int)",1);//获取第一个的工作簿
        }
    }
    excelWorksheets = excelWorkbook->querySubObject("Sheets");//获取工作表管理器
    excelWorksheet = excelWorksheets->querySubObject("Item(int)",1);//获取第一个工作表
}
//添加工作表
void MainWidget::AppendExcelWorksheet(const QString &sheetName)
{
    int cnt = excelWorksheets->property("Count").toInt();//获取Excel工作表的数目
    QAxObject *lastExcelWorksheet = excelWorksheets->querySubObject("Item(int)",cnt);//获取Excel最后一个工作表
    excelWorksheets->querySubObject("Add(QVariant)", lastExcelWorksheet->asVariant());
    excelWorksheet = excelWorksheets->querySubObject("Item(int)", cnt);//获取最后一个工作表
    lastExcelWorksheet->dynamicCall("Move(QVariant)", excelWorksheet->asVariant());
    excelWorksheet->setProperty("Name", sheetName);//设置工作表名称
}
//写数据
void MainWidget::WriteExcelWorksheet(int row, int column,const QString &dataStr)
{
    QAxObject *range = excelWorksheet->querySubObject("Cells(int,int)", row, column);
    range->dynamicCall("Value",dataStr);
}
//保存文件
void MainWidget::saveExcel(const QString &fileName)
{
    excelWorkbook->dynamicCall("SaveAs(const QString &)",
                               QDir::toNativeSeparators(fileName));
}
//退出
void MainWidget::FreeExcel()
{
    if(excelApp != NULL)
    {
        excelApp->dynamicCall("Quit()");
        delete excelApp;
        excelApp = NULL;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值