Qt与Excel交互

写在前面

 之前对与Qt和Excel、Word的交互不太了解,知道有这么回事,但是具体怎么写和涉及到那些类不太清楚。
 结果工作中要用到,因为不太熟悉这方面,所以被另外一个“同事”接下了客户发布的“赏金任务”,感到遗憾,失去了一个在工作中锻炼自己和表现自己的机会。
 不过没关系,自己看看和了解一下基本操作还是可以滴。

Qt与Excel交互

  1. 主要用到QAxObject类,所有Excel中的对象(excel,workbook,sheet,cell等等)和Word中的对象(word,document,selection等等)都被看做QAxObject对象。

  2. 除了要添加头文件#include <QAxObject>之外,还要再.pro文件中添加
    QT = axcontainer

  3. 基本操作:

    QAxObject *m_excel;
    QAxObject *m_workBooks;
    QAxObject *m_workBook;
    QAxObject *m_sheets;
    m_excel = new QAxObject("Excel.Application");
    m_workBooks = m_excel->dynamicCall("WorkBooks");
    
    //m_workBooks->dynamicCall("Open(const QString&)","X:\\xx\\xx.xlsx"); //打开一个已经存在excel
    m_workBooks->dynamicCall("Add"); //新建一个excel
    m_workBook = m_excel->querySubObject("ActiveWorkBook"); //获得当前激活的excel
    
    m_sheets = m_workBook->querySubObject("Sheets);
    
    //注意下述新建sheet和获得一个已有的sheet,调用querySubObject的对象区别
    //QAxObject *m_sheet = m_sheets->querySubObject("Item(int)",n); //打开第n个sheet
    m_sheets->dynamicCall("Add"); //新建一个sheet
    QAxObject *m_sheet= m_workbook->querySubObject("ActiveSheet");
    
    QAxObject *m_cell = m_sheet->querySubObject("Range(QVariant,QVariant)","C3");//获得C3单元格
    m_cell->dynamicCall("SetValue(const QVariant&)",QVariant("Qttttt");//向单元格写入
    QString str = m_cell->dynamicCall("Value2()").toString();从单元格读出
    
    //关闭excel,结束对excel的操作
    m_workBook->dynamicCall("SaveAs(const QString&)","X:\\xx\\xx.xlsm");
    m_workBook->dynamicCall("Close()");
    m_excel->dynamicCall("Quit()");

    Word的操作类似吧,不写了。

4.QAxWidget
 用于实时显示和浏览Office文档内容,还是相当于调用的Office。需要用一个Qt控件进行包装。

QAxWidget *m_widget = new QAxWidget("Excel.Application",ui->lable);
m_Widget->dynamicCall("DisplayAlerts",false);//忽略excel弹出的警告框
m_widget->setGeometry(x,y,width,height);//设置显示区域位置和大小
m_widget->setControl("X:\\xx\\xx.xlsx")//要打开的文件路径
m_widget->show();

示例
5. 总结
  dynamicCall执行操作,querySubObject获得对象。
 经常写不对的原因是,各个对象是由哪个对象调用querySubOject获得的,经常搞不清楚。还是得孰能生巧,回头写个比较综合的东西锻炼一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值