当前位置:网站首页>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、源代码
边栏推荐
- STM32 移植 RT-Thread 标准版的 FinSH 组件
- Hisilicon 3559 universal platform construction: introduction to YUV format
- 【惊了】迅雷下载速度竟然比不上虚拟机中的下载速度
- Visual Studio配置Qt并通过NSIS实现项目打包
- 【目标跟踪】|pytracking 配置 win 编译prroi_pool.pyd
- Linux系统Redis的安装
- Browser plays RTSP video based on nodejs
- SuperMap iServer11i新功能----图例的发布和使用
- Mysql判断计算结果,除以100
- Mysql中 begin..end使用遇到的坑
猜你喜欢

SuperMap iServer11i新功能----图例的发布和使用

ECDSA signature verification in crypt

Linux系统Redis的安装

90. (cesium chapter) cesium high level listening events

Analysis of the whole process of common tilt data processing in SuperMap idesktop

不同类型的变量与零究竟是如何比较

Instructions for legend use in SuperMap iclient3d 11i for cesium 3D scene

海思3559开发常识储备:相关名词全解

rpm2rpm 打包步骤

Building a database model using power designer tools
随机推荐
Tencent two sides: @bean and @component are used on the same class. What happens?
Substrate 源码追新导读: Call调用索引化, 存储层事物化全面完成
STM32 移植 RT-Thread 标准版的 FinSH 组件
【驚了】迅雷下載速度竟然比不上虛擬機中的下載速度
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
SuperMap iclient3d for webgl loading TMS tiles
[300+ continuous sharing of selected interview questions from large manufacturers] column on interview questions of big data operation and maintenance (II)
浅谈 JMeter 运行原理
Spatiotemporal prediction 2-gcn_ LSTM
Grep match lookup
JMeter之事务控制器
Today in history: Microsoft acquires PowerPoint developers; SGI and MIPS merge
Redis的基本操作的命令
【OpenGL】OpenGL Examples
时空预测2-GCN_LSTM
Idea has a new artifact, a set of code to adapt to multiple terminals!
How to use the plug-in mechanism to gracefully encapsulate your request hook
Browser plays RTSP video based on nodejs
Why should offline stores do new retail?
【目标跟踪】|pytracking 配置 win 编译prroi_pool.pyd