学习背景:
适合熟悉些qt开发,但是不是深入了解的开发者学习。具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正!
一.简单介绍
QAxObject是Qt提供的包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加"QT += axcontainer "。
二.与excel com连接的方法
1. #include
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-&