Qt之excel 操作使用说明

这篇博客主要介绍了如何在Qt中利用QAxObject与Excel COM连接,包括新建、打开、保存、关闭工作簿,以及读写单元格内容。适用于熟悉Qt但不深入的开发者,特别提到了在Windows 7 64位环境下,使用Office 2007 Excel验证,并提供了设置Excel DCOM权限的步骤。

学习背景:

    适合熟悉些qt开发,但是不是深入了解的开发者学习。具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正!


 

一.简单介绍

    QAxObject是Qt提供的包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加"QT  +=  axcontainer "。

二.与excel com连接的方法

  1. #include <ActiveQt/QAxObject>  

  2. QAxObject *excel = new QAxObject("Excel.Application"); //!建立excel操作对象,并连接Excel控件

  3. excel->dynamicCall("SetVisible (bool Visible)",  "false"); //!  设置为不显示窗体

  4.excel->setProperty("DisplayAlerts", false); //! 不显示任何警告信息, 如关闭时的是否保存提示

  5.excel->dynamicCall("Quit(void)");  //! 关闭excel程序,操作完后记着关闭,由于是隐藏在后台进程中,不关闭进程会有很多excel.exe。

  6.workbook->dynamicCall("Close(Boolean)", false); //! 关闭exce程序先关闭.xls文件

三.Excel基本操作

  只介绍简单的读写操作,需要修改单元格格式等操作,请"Excel VBA参考手册.chm"

  3.1  excel文件操作

   获取当前工作簿的集合

  1> QAxObject *workbooks =  excel->querySubObject("Workbooks"); //! 获取工作簿(excel文件)集合

  新建一个工作簿

  1> workbooks->synamicCall("Add"); //新建一个工作簿

      QAxObject *workbook = excel->querySubObject("ActiveWorkBook"); //! 获取当前工作簿

  打开一个已有的工作簿

  1>QString filename = "e:/123.xlsx";

  2>QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", filename);

  保存工作簿

  1>workbook->dynamicCall("Save()");   //!保存文件

  2>workbook->dynamicCall("Close(Boolean)", false);  //! 关闭文件 

  3>excel->dynamicCall("Quit()"); //! 关闭excel

  另存为工作簿

  1>QDir::toNativeSeparators,将路径中的"/"转换为"\",否则无法保存,"/"只是qt中可以识别

  2>workbook->dynamiCall("SaveAs(const QString&)",  QDit::toNativeSeparators(filename));

  3>workbook->synamicCall("Close(Boolean)", false); //! 关闭文件

  4>excel->dynamicCall("Quit()"); //! 关闭excel

  3.2 Sheet工作表操作

  获取所有工作表

  1> QAxObject *worksheets = workbook->querySubObject("Sheets"):

  根据序号获取某个工作表,序号顺序就是excel 打开后下方的排序

  1>QAxObject *worksheet = worksheets->querySubObejct("Item(int)", 1);

  获取表中的行数列数 

  1>QAxObject* usedrange = worksheet->querySubObject("UsedRange"); //!  sheet 范围

  2>int intRowStart = usedrange->property("Row").toInt(); //!  起始行数

  3>int intColStart = usedrange->property("Column").toInt(); //!  起始列数 

  4>QAxObject *rows, *columns;

  5>rows = usedrange->querySubObject("Rows"): //! 行 

  6>columns = usedrange->querySubObject("Columns"); //! 列

  7>int intRow = rows->property("Count").toInt(); //! 行数

  8>int intCol = columns->property("Count").toInt();  //!  列数

  3.3 内容操作

  数据内容操作--获取单元格--基于坐标

  1> Q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值