当前位置:网站首页>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、源代码
边栏推荐
- Solve the problem that the server cannot be connected via SSH during reinstallation
- SuperMap 3D SDKs_ Unity plug-in development - connect data services for SQL queries
- QT MSVC installation and commissioning
- Redis-緩存問題
- dataworks 同步maxcomputer 到sqlserver ,汉字变乱码了,请问怎么解决
- 【一天学awk】基础中的基础
- 60 个神级 VS Code 插件!!
- 21. Notes on WPF binding
- NoSQL - redis configuration and optimization
- Instructions for legend use in SuperMap iclient3d 11i for cesium 3D scene
猜你喜欢

Lvgl widget styles

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

ECDSA signature verification in crypt

海思3559万能平台搭建:获取数据帧修改后编码

Inner join and outer join of MySQL tables

Redis cache problem

Commands for redis basic operations

Scratch drawing square electronic society graphical programming scratch grade examination level 2 true questions and answers analysis June 2022

【 surprise】 la vitesse de téléchargement de Thunderbolt n'est pas aussi rapide que celle de la machine virtuelle

Redis configuration files and new data types
随机推荐
Three ways for flinksql to customize udaf
Some commonly used hardware information of the server (constantly updated)
[cloud native | kubernetes] in depth understanding of deployment (VIII)
“\“id\“ contains an invalid value“
The website with id 0 that was requested wasn‘t found. Verify the website and try again
全面解析免费及收费SSH工具的基本特性和总结
【OpenGL】OpenGL Examples
Sword finger offer 05 Replace spaces: replace each space in the string s with "%20"“
Building of Hisilicon 3559 universal platform: obtaining the modified code of data frame
RDS MySQL数据迁移PolarDB MySQL费用可以转过去吗?
【一天学awk】运算符
Layout of pyqt5 interface and loading of resource files
Sarsa notes
Redis - problèmes de cache
Introduction to the novelty of substrate source code: comprehensive update of Boca system Boca weight calculation, optimization and adjustment of governance version 2.0
MySQL中变量的定义和变量的赋值使用
pyqt5界面的布局与资源文件的载入
海思3559万能平台搭建:YUV格式简介
STM32 移植 RT-Thread 标准版的 FinSH 组件
How to select an OLAP database engine?