当前位置:网站首页>Qt读写Excel--QXlsx工作表显示/隐藏状态设置4
Qt读写Excel--QXlsx工作表显示/隐藏状态设置4
2022-06-30 12:15:00 【mahuifa】
Qt读写Excel–QXlsx工作表显示/隐藏状态设置4🤏
更多精彩内容 |
---|
个人内容分类汇总 |
1、概述
QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用;
使用方式
- QXlsx可以编译为动态库使用(使用动态库不用每次的编译,也可以让项目代码量更少,不用一打开工程就几十个文件);
- 直接将QXlsx.pri加入代码中使用(我比较推荐直接使用源码,因为QXlsx的注释信息基本在cpp文件中,可以通过阅读源码和注释来学习QXlsx的功能,当然,如果你已经熟悉了QXlsx的使用方式那编译成库使用会更方便,可以使工程的代码量变少);
本文中实现的功能:
- 创建指定名称的工作表(Sheet),自动添加到最末尾;
- 查询打开的Excel中所有可用的工作表(Sheet)名称;
- 查询选中工作表的状态(显示、隐藏、绝对隐藏);
- 设置选中工作表的状态(显示、隐藏、绝对隐藏);
- 一键调用WPS快速打开Excel(为了方便查看效果)。
2、准备工作
Qt读写Excel–QXlsx基本使用1 |
---|
Qt读写Excel–QXlsx编译为静态库2 |
3、函数说明🤟
注意:执行了操作要保存才生效。
QStringList sheetNames() const - 功能说明: 查询Excel中所有的工作表(Sheet)名称;
- 返回值:所有工作表的名称列表;
bool addSheet(const QString &name = QString(), AbstractSheet::SheetType type = AbstractSheet::ST_WorkSheet) - 功能说明: 在末尾创建一个名称为name,类型为type的工作表;
- 参数name: 创建的工作表的名称,如果没指定名称则默认为Sheet1、Sheet2递增;
- 参数type: 创建的工作表的类型,可省略;
- ST_WorkSheet:表格工作表
- ST_ChartSheet:图表工作表
- ST_DialogSheet:还不支持
- ST_MacroSheet:还不支持
- 返回值: 创建成功则返回true,失败返回false;
- 如果名称已存在则创建失败;
- 如果是ST_DialogSheet、ST_MacroSheet也创建失败;(注意这种创建失败有bug,创建失败后输入的name会被保存,下次不能再创建这个名称的工作表,不过不影响使用, 修复方法:在
xlsxworkbook.cpp
文件中的Q_ASSERT(false);
下一行添加return sheet;
即可)
AbstractSheet *Document::sheet(const QString &sheetName) const - 功能说明: 根据输入的工作表名称sheetName返回工作表的指针,如果不存在则返回NULL
- 参数sheetName: 工作表名称;
- 返回值: 成功返回可用工作表指针,失败返回NULL;
AbstractSheet::SheetState AbstractSheet::sheetState() const 功能说明: 获取当前工作表的状态;
返回值: 工作表当前状态
enum SheetState { SS_Visible(显示),SS_Hidden(隐藏), SS_VeryHidden(绝对隐藏) };
;显示状态:通过WPS打开Excel就可以看见工作表;
隐藏状态:打开Excel不能看见隐藏的工作表,需要设置取消隐藏才可以看见;
绝对隐藏:设置了取消隐藏也看不见。
void AbstractSheet::setSheetState(SheetState state) - 功能说明: 设置工作表状态。
- 参数state: 需要设置的工作表状态
enum SheetState { SS_Visible(显示),SS_Hidden(隐藏), SS_VeryHidden(绝对隐藏) };
;
bool AbstractSheet::isHidden() const - 功能说明: 工作表是否隐藏。
- 返回值: 工作表为【隐藏状态】或者【绝对隐藏状态】返回true,【显示状态】返回false;
bool AbstractSheet::isVisible() const - 功能说明: 工作表是否显示(与isHidden()相反)。
- 返回值: 工作表为【隐藏状态】或者【绝对隐藏状态】返回false,【显示状态】返回true;
void AbstractSheet::setHidden(bool hidden) - 功能说明: 设置工作表隐藏或可见。
- 参数hidden: true:隐藏 false:显示
void AbstractSheet::setVisible(bool visible) - 功能说明: 设置工作表隐藏或可见。
- 参数hidden: true:显示 false:隐藏
4、示例代码
4.1 .h文件
/****************************************************************************** * @文件名 test3.h * @功能 基于AbstractSheet类的Demo,主要演示了 * 1、创建工作表; * 2、查询工作表; * 3、查询工作表状态; * 4、设置工作表状态。 * * @开发者 mhf * @邮箱 [email protected] * @时间 2022/06/19 * @备注 *****************************************************************************/
#ifndef TEST3_H
#define TEST3_H
#include <QWidget>
namespace Ui {
class Test3;
}
class Test3 : public QWidget
{
Q_OBJECT
public:
explicit Test3(QWidget *parent = nullptr);
~Test3();
private slots:
void on_but_show_clicked();
void on_but_addSheet_clicked();
void on_com_sheets_activated(const QString &arg1);
void on_com_state_activated(int index);
private:
Ui::Test3 *ui;
};
#endif // TEST3_H
4.2 .cpp文件
#include "test3.h"
#include "ui_test3.h"
#include <QDir>
#include <qprocess.h>
#include <QDebug>
#include "xlsxdocument.h"
QXLSX_USE_NAMESPACE // 添加Xlsx命名空间
#define EXCEL_NAME "state.xlsx" // 本Demo使用的Excel文件名
Test3::Test3(QWidget *parent) :
QWidget(parent),
ui(new Ui::Test3)
{
ui->setupUi(this);
this->setWindowTitle("QXlsx查询设置工作表状态Demo");
}
Test3::~Test3()
{
delete ui;
}
/** * @brief 通过调用WPS打开当前路径下的Excel文件,如果打开失败需要替换自己的wps的安装路径 */
void Test3::on_but_show_clicked()
{
bool ret = QProcess::startDetached("D:/WPS Office/ksolaunch.exe", QStringList() << QDir::currentPath() + "/" + EXCEL_NAME);
if(!ret)
{
qWarning() << "打开Excel失败,请注意wps路径是否存在,或者替换其它程序打开excel";
}
}
/** * @brief 创建一个工作表 */
void Test3::on_but_addSheet_clicked()
{
Document xlsx(EXCEL_NAME); // 如果文件存在则打开EXCEL_NAME,如果不存在则传入文件名,在save时保存为EXCEL_NAME
qDebug() << xlsx.load(); // 如果文件存在,并且打开成功则为true,否则为false
// xlsx.addSheet(); // 创建一个工作表,如果没指定名称则默认为Sheet1、Sheet2递增
xlsx.addSheet(ui->line_name->text()); // 指定名称创建工作表(默认设置为当前活动工作表)
xlsx.write(2, 2, "hello"); // 在当前活动工作表写入数据
if(xlsx.save()) // 因为在【Document xlsx(EXCEL_NAME);】指定了文件名称,所以保存到EXCEL_NAME,如果没有指定则默认【Book1.xlsx】
{
qDebug() << "保存成功!";
ui->com_sheets->clear();
ui->com_sheets->addItems(xlsx.sheetNames()); // 查询所有可用工作表
}
else
{
qDebug() << "保存失败!";
}
}
/** * @brief 通过下拉框选择工作表名称,查询工作表状态 * @param arg1 */
void Test3::on_com_sheets_activated(const QString &arg1)
{
Document xlsx(EXCEL_NAME);
AbstractSheet* sheet = xlsx.sheet(arg1); // 根据名称获取工作表指针
if(!sheet) return; // 判断是否为NULL
int state = sheet->sheetState(); // 获取当前工作表状态
ui->com_state->setCurrentIndex(state);
}
/** * @brief 设置工作表状态, * 可通过setSheetState设置显示、隐藏、绝对隐藏【三种状态】, * 通过sheetState获取工作表当前状态【三种状态】 * 也可以通过setHidden或setVisible设置显示、隐藏状态【两种状态】, * 并通过isHidden或者isVisible查询显示隐藏状态【两种状态】 * @param index */
void Test3::on_com_state_activated(int index)
{
Document xlsx(EXCEL_NAME);
AbstractSheet* sheet = xlsx.sheet(ui->com_sheets->currentText()); // 根据名称获取工作表指针
if(!sheet) return; // 判断是否为NULL
sheet->setSheetState(AbstractSheet::SheetState(index)); // 修改工作表状态
if(xlsx.save())
{
qDebug() << "保存成功!" ;
}
else
{
qDebug() << "保存失败!";
}
}
5、实现效果
6、源代码
边栏推荐
- New function of SuperMap iserver11i -- release and use of legend
- 品达通用权限系统(Day 7~Day 8)
- 【惊了】迅雷下载速度竟然比不上虚拟机中的下载速度
- Redis installation on Linux system
- 剑指 Offer 05. 替换空格: 把字符串 s 中的每个空格替换成“%20“
- RDS MySQL数据迁移PolarDB MySQL费用可以转过去吗?
- 江西财经大学智慧江财登录分析
- 90. (cesium chapter) cesium high level listening events
- 海思3559萬能平臺搭建:獲取數據幀修改後編碼
- [cloud native | kubernetes] in depth understanding of deployment (VIII)
猜你喜欢
Instructions for legend use in SuperMap iclient3d 11i for cesium 3D scene
Today in history: Microsoft acquires PowerPoint developers; SGI and MIPS merge
Redis的配置文件及新数据类型
Redis - problèmes de cache
Dqn notes
海思3559万能平台搭建:获取数据帧修改后编码
90. (cesium chapter) cesium high level listening events
Four ways for flinksql to customize udtf
不同类型的变量与零究竟是如何比较
QT implementation dynamic navigation bar
随机推荐
Sword finger offer 05 Replace spaces: replace each space in the string s with "%20"“
Joplin implements style changes
Redis - problèmes de cache
Introduction to new features of ES6
Solve the problem that the server cannot be connected via SSH during reinstallation
数据仓库建设之确定主题域
Set set
Hisilicon 3559 sample parsing: Venc
问卷星问卷抓包分析
JMeter性能测试工作中遇到的问题及剖析,你遇到了几个?
[bug solution] fiftyone reports attributeerror: module 'CV2' has no attribute 'GAPI_ wip_ gst_ Gstreamerpipeline 'error resolution
Double dqn notes
7 lightweight and easy-to-use tools to relieve pressure and improve efficiency for developers, and help enterprises' agile cloud launch | wonderful review of techo day
90. (cesium chapter) cesium high level listening events
Global capital market 101: Breit, one of the best investment targets for domestic high net worth people
Tencent two sides: @bean and @component are used on the same class. What happens?
Efficient elliptic curve point addition and multiplication in scrypt
grep匹配查找
【MySQL】MySQL的安装与配置
MySQL中变量的定义和变量的赋值使用