Qt Excel操作
Qt Excel操作
- 简单介绍
- 其他库
- 基础操作
- 添加模块
- 相关代码
- 遇到的坑
简单介绍
最近在写一个小工具涉及到了Excel操作,顺便学习记录一下。文章内使用的是Windows系统的ActiveX对象(QAxObject)操作Excel。
其他库
Qt操作Excel的库还有很多,可以参考Qt君写的链接: Qt处理Excel的一些库.
基础操作
添加模块
在Qt Creator中使用QAxObject需要先在pro中添加:
QT += axcontainer
在VS中使用的话需要在建工程或者,是项目右键的Qt Moudules中勾选ActiveQt container
包含头文件ActiveQt/QAxObject
include<ActiveQt/QAxObject>
相关代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <ActiveQt/QAxObject>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void OpenExcel();void AddNewExcel();void SaveAndClose();int GetRowsCount();QString GetCell(int row, int column);QString GetCell(QString numer);void SetCell(int row, int column, QString value);void SetCell(QString number, QString value);void SetCellColor(int row, int column, QColor color);private:Ui::Widget *ui;QAxObject *m_pExcel;QAxObject *m_pWorkBooks;QAxObject *m_pWorkBook;QAxObject *m_pWorkSheets;QAxObject *m_pWorkSheet;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QDir>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), m_pExcel(nullptr), m_pWorkBooks(nullptr), m_pWorkBook(nullptr), m_pWorkSheets(nullptr), m_pWorkSheet(nullptr)
{ui->setupUi(this);// 连接excel 控件m_pExcel = new QAxObject("Excel.Application");// m_pExcel->setControl("Excel.Applicatio");// 设置操作excel时不打开excel窗体m_pExcel->dynamicCall("SetVisible(bool Visible)",false);// 设置不显示任何警告信息m_pExcel->setProperty("DisplayAlert",false);}// 打开已有的excel
void Widget::OpenExcel()
{QString strExcelPath = "C:\\Users\\Qcx\\Desktop\\test.xlsx";// 获取当前工作簿m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");// 打开指定工作簿m_pWorkBook = m_pWorkBooks->querySubObject("Open(const QString&)",strExcelPath);if(m_pWorkBook){qDebug()<<"Open Excel Success!";}// 获取sheetsm_pWorkSheets = m_pWorkBook->querySubObject("Sheets");// 获取某个sheetm_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)",1);
}// 创建新的Excel
void Widget::AddNewExcel()
{// 获取当前工作簿m_pWorkBooks = m_pExcel->querySubObject("WorkBooks");m_pWorkBooks->dynamicCall("Add");m_pWorkBook = m_pExcel->querySubObject("ActiveWorkBook");m_pWorkSheets = m_pWorkBook->querySubObject("Sheets");m_pWorkSheet = m_pWorkSheets->querySubObject("Item(int)",1);
}// 保存并关闭Excel
void Widget::SaveAndClose()
{QString strSavePath = "C:\\Users\\Qcx\\Desktop\\temp.xlsx";// 保存文件,一定要将路径中的'/'转为'\\',前者只能被Qt识别m_pWorkBook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(strSavePath));// 关闭文件m_pWorkBook->dynamicCall("Close()");// 关闭excelm_pExcel->dynamicCall("Quit()");delete m_pExcel;m_pExcel = nullptr;
}// 获取行数
int Widget::GetRowsCount()
{int iRows = 0;QAxObject *pRows = m_pWorkSheet->querySubObject("Rows");iRows = pRows->property("Count").toInt();return iRows;
}// 获取单元格内容,行号+列号
QString Widget::GetCell(int row, int column)
{QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);return pCell->property("Value").toString();
}// 获取单元格内容,单元格标号如: A1,C5
QString Widget::GetCell(QString number)
{QAxObject *pCell = m_pWorkSheet->querySubObject("Range(QString)", number);return pCell->property("Value").toString();
}// 设置单元格内容,行号+列号
void Widget::SetCell(int row, int column, QString value)
{QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);pCell->setProperty("Value", value);
}// 设置单元格内容,单元格标号如: A1,C5
void Widget::SetCell(QString number, QString value)
{QAxObject *pCell = m_pWorkSheet->querySubObject("Range(QString)", number);pCell->setProperty("Value", value);
}// 设置单元格颜色的方式与设置值的方式一样,都是先获取到单元格,再设置属性
void Widget::SetCellColor(int row, int column, QColor color)
{QAxObject *pCell = m_pWorkSheet->querySubObject("Range(int, int)", row, column);QAxObject *pInterior = pCell->querySubObject("Interior");pInterior->setProperty("Color", color);
}Widget::~Widget()
{delete ui;
}
其他更多操作可参考该文章: Qt之操作Excel.
遇到的坑
在进行关闭操作时,明明执行没有任何错误,指针也没有异常,但就是Excel进程没有被杀死,我遇到的情况是电脑安装了福昕阅读器,会占用Excel的com接口。有两种解决方案:
1、暴力简单,直接卸载福昕阅读器;
2、打开Excel --> 选项 --> 加载项 --> 最下方的管理 --> 选中COM加载项 --> 转到 --> 取消FoxitReader PDF Creator COM Add-in。
Qt Excel操作相关推荐
- Qt excel 操作使用说明
一.简单介绍 QAxObject是Qt提供的包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加 QT += axcontainer 二.与excel ...
- Qt之excel 操作使用说明
学习背景: 适合熟悉些qt开发,但是不是深入了解的开发者学习.具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正! 一.简单介绍 QAx ...
- Qt QAxObject操作excel文件过程总结
最近由于需要Qt来操作Excel文件,所以想把QAxObject用起来,此次使用也是机缘巧合,记录了一下心路历程. 此前走了很多弯路,希望做同样事情的人就别纠缠于同样的错误就好. 配制方面: 1.确保 ...
- Qt之操作Excel
Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...
- python数据分析报告的格式_Python数据报表之Excel操作模块用法分析
本文实例讲述了Python数据报表之Excel操作模块用法.分享给大家供大家参考,具体如下: 一 点睛 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数 ...
- python处理excel表格实例-通过实例学习Python Excel操作
这篇文章主要介绍了通过实例学习Python Excel操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.python 读取Excel # -* ...
- python与excel做数据可视化-Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
- python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧
原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...
- python在excel中的应用-python中的excel操作
一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...
最新文章
- Vision Transformers 大有可为!
- 多通道接收机幅相校准测试系统的设计
- Linux下的零拷贝
- Rise of Shadows 闰年leap year-无法线性筛
- 【顶】Asp无组件生成缩略图(1)
- 关于计算机英语阅读,一篇摘选的关于计算机的英语阅读材料,对大家的英语也许会有提高!...
- python类与对象做项目_python 类和对象
- Linux下ip route、ip rule、iptables的关系(转
- Linux系统下载镜像
- 欧姆龙plc OMRON SYSMAX CP1H-E 使用 CXONE_V4.60 连接和编程
- 华为荣耀4X的ROOT
- LayoutInflater类的作用与用法
- IM通讯系统分析与实战
- c语言写长方形体积公式是什么,长方体的体积公式 长方体的体积公式是什么
- iOS 图片裁剪功能。
- 为什么pdf文件在一个计算机上能打开,拷贝到别的计算机上就打不开,显示文件已损坏?,pdf文件在电脑上打不开怎么办...
- etcd之日志和快照管理
- 晨曦记账本,记账一目了然
- 安卓项目为什么要clean,以及如何clean
- omnipeek安装步骤
热门文章
- 洛谷 P1162 填涂颜色 C++ 深搜 染色法
- 4.1Reduction模型
- windows server + documents4j 转excel报错 Could not access target file
- Error: spawn cmd ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19
- 一个产品经理的自我认识
- eth_clockgen.v
- 用链表实现对二进制数加1的运算
- 桔皮加蜂蜜的制作方法?桔皮加蜂蜜泡水喝吗?
- java文件中搜索的快捷键_MyEclipse中的查找快捷键
- php k线15分钟 30分钟,5分钟K线、15分钟K线、30分钟K线和60分钟K线