• Qt读写Excel--QXlsx工作表显示/隐藏状态设置4


    Qt读写Excel–QXlsx工作表显示/隐藏状态设置4🤏

    更多精彩内容
    👉个人内容分类汇总 👈

    1、概述✌

    • QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用;

    • 使用方式

      1. QXlsx可以编译为动态库使用(使用动态库不用每次的编译,也可以让项目代码量更少,不用一打开工程就几十个文件);
      2. 直接将QXlsx.pri加入代码中使用(我比较推荐直接使用源码,因为QXlsx的注释信息基本在cpp文件中,可以通过阅读源码和注释来学习QXlsx的功能,当然,如果你已经熟悉了QXlsx的使用方式那编译成库使用会更方便,可以使工程的代码量变少);
    • 本文中实现的功能:

      1. 创建指定名称的工作表(Sheet),自动添加到最末尾;
      2. 查询打开的Excel中所有可用的工作表(Sheet)名称;
      3. 查询选中工作表的状态(显示、隐藏、绝对隐藏);
      4. 设置选中工作表的状态(显示、隐藏、绝对隐藏);
      5. 一键调用WPS快速打开Excel(为了方便查看效果)。

    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
     * @邮箱       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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    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() << "保存失败!";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    5、实现效果👐

    在这里插入图片描述

    6、源代码💪

    gitee
    github

    🤜🤜🤜🤜🤜🤜🤜🤜🤜

  • 相关阅读:
    笙默考试管理系统-SMExamination.Model.Notice展示(2)
    Day23——修剪二叉搜索树、将有序数组转化为二叉搜索树、把二叉搜索树转化为累加树
    ts | js | 爬虫小公举分享
    详解卷积神经网络结构
    反转问题(字符串和链表)
    【爬虫】7.3. CSS位置偏移反爬案例分析与实战
    【编译原理】概述
    数据结构:堆
    linux下安装maven(详细图文教程)
    我的区块链笔记
  • 原文地址:https://blog.csdn.net/qq_43627907/article/details/125463311