| 更多精彩内容 |
|---|
| 👉个人内容分类汇总 👈 |
QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用;
使用方式
本文中实现的功能:
- 创建指定名称的工作表(Sheet),自动添加到最末尾;
- 查询打开的Excel中所有可用的工作表(Sheet)名称;
- 查询选中工作表的状态(显示、隐藏、绝对隐藏);
- 设置选中工作表的状态(显示、隐藏、绝对隐藏);
- 一键调用WPS快速打开Excel(为了方便查看效果)。
注意:执行了操作要保存才生效。⛔
| QStringList sheetNames() const |
| bool addSheet(const QString &name = QString(), AbstractSheet::SheetType type = AbstractSheet::ST_WorkSheet) |
xlsxworkbook.cpp文件中的Q_ASSERT(false);下一行添加return sheet;即可)| AbstractSheet *Document::sheet(const QString &sheetName) const |
| AbstractSheet::SheetState AbstractSheet::sheetState() const |
功能说明: 获取当前工作表的状态;
返回值: 工作表当前状态enum SheetState { SS_Visible(显示),SS_Hidden(隐藏), SS_VeryHidden(绝对隐藏) };;
显示状态:通过WPS打开Excel就可以看见工作表;
隐藏状态:打开Excel不能看见隐藏的工作表,需要设置取消隐藏才可以看见;

绝对隐藏:设置了取消隐藏也看不见。
| void AbstractSheet::setSheetState(SheetState state) |
enum SheetState { SS_Visible(显示),SS_Hidden(隐藏), SS_VeryHidden(绝对隐藏) };;| bool AbstractSheet::isHidden() const |
| bool AbstractSheet::isVisible() const |
| void AbstractSheet::setHidden(bool hidden) |
| void AbstractSheet::setVisible(bool visible) |
/******************************************************************************
* @文件名 test3.h
* @功能 基于AbstractSheet类的Demo,主要演示了
* 1、创建工作表;
* 2、查询工作表;
* 3、查询工作表状态;
* 4、设置工作表状态。
*
* @开发者 mhf
* @邮箱 1603291350@qq.com
* @时间 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
#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() << "保存失败!";
}
}

🤜🤜🤜🤜🤜🤜🤜🤜🤜