qtxlsx 学习

简介:

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

QXlsx和QAxObject 比较

QAxObject使用需要系统中安装了offie或wps,这种方法不推荐使用;

因为如果安装了wps,可能部分功能用不了;

同时安装了office、wps在使用时可能有问题;

或者电脑里安装了一些pdf阅读器则直接不能使用了;

QXlsx不依赖于系统环境,使用时打开excel文件将所有数据读入内存,然后就关闭文件了,也不存在文件被占用的情况。

下载QtXlsx

下载地址:GitHub - dbzhang800/QtXlsxWriter: .xlsx file reader and writer for Qt5

该代码可以同时在windows和linux系统上使用。整个安装包QtXlsxWriter-master如下:

使用QtXlsx

windows平台

有2种办法使用QtXlsx,一种是QtXlsx源码嵌入QTCreator中使用,第二种是把QtXlsx编译成lib、dll库使用。

环境:windows10 + QT5.15.2

QtXlsx源码嵌入QTCreator中使用
  1. 新建一个QTCreator对话框项目test1xlsx,其代码目录结构如下

  1. 在test1xlsx的pro文件添加xlsx的pri信息,如下

include($$PWD/../QtXlsxWriter-master/src/xlsx/qtxlsx.pri)

  1. 编写调用qtxlsx函数代码

    QXlsx::Document xlsx;

    xlsx.write(1, 2, "Hello Qt!");

    xlsx.write(2, 2, "中文");

xlsx.saveAs("Text.xlsx");

QtXlsx源码编译成为.lib库使用
需要先下载安装Perl

下载链接:Strawberry Perl for Windows

可以选择下载32bit或者64位的,这里我下载strawberry-perl-5.32.1.1-32bit.msi

注意,这个是一定要下载安装的,否则编译lib库会编译失败!!

编译QtXlsx源码

打开下载的QtXlsx文件夹,使用qt打开qtxlsx.pro.直接编译。在构建目录下得到include、lib、bin的目录文件。

使用QtXlsx库
  1. 新建qt项目testxlsx。

Code目录为testxlsx项目源码,xlsx为新建目录,包含include、lib文件夹。

  1. 拷贝include文件

把qtxlsx项目构建的include文件夹拷贝过来,但include文件夹的头文件都是引用qtxlsx项目src的头文件,所以直接把qtxlsx项目的src\xlsx目录上的.h文件拷贝到include文件夹覆盖原有的(总共16个)。

把qtxlsx项目的src\xlsx目录上的_p.h文件拷贝到include文件夹\QtXlsx\0.3.0\QtXlsx\private目录下覆盖原有的(总共27个)

  1. 拷贝lib文件

把qtxlsx项目构建的lib文件夹的lib文件拷贝到\xlsx\lib过来,

  1. 拷贝dll文件

把qtxlsx项目构建的bin文件夹的dll文件拷贝到\bin\debug过来,

  1. 在测试项目testxlsx的pro配置头文件、lib库

INCLUDEPATH += $$PWD/../xlsx/include/QtXlsx

CONFIG(debug, debug|release) {

    #指定生成的应用程序放置的目录

    DESTDIR += $$PWD/../bin/debug/

    LIBS += -L$$PWD/../xlsx/lib/  -lQt5Xlsxd

} else {

    #指定生成的应用程序放置的目录

    DESTDIR += $$PWD/../bin/release/

    LIBS += -L$$PWD/../xlsx/lib/  -lQt5Xlsx

}

  1. 编码调用xlsx,直接引用#include <QtXlsx>即可。

void Dialog::on_pushButton_clicked()

{

    QXlsx::Document xlsx;//只处理当前的sheet页,默认为第一页。

    QString strsheetName = xlsx.currentSheet()->sheetName();

    xlsx.renameSheet(strsheetName,"1");

    xlsx.write(1, 2, "Hello Qt!");

    xlsx.write(1, 1, 1);

    xlsx.write(2, 1, 2);

    xlsx.write(3, 1, 3);

    xlsx.write(4, 1, 4);

    xlsx.defineName("Factor", "=2");

    xlsx.defineName("Cell_1", "=1!$A$1:$A$4");    // A1-A4命名为Cell_1

    xlsx.write(5, 1, "=SUM(Cell_1)");

    xlsx.write(6, 1, "=SUM($A$1:$A$4)");

    xlsx.write(7, 1, "=SUM(Cell_1)*Factor");

    xlsx.addSheet("2");

    QXlsx::Format format;

    format.setFontColor(Qt::red);                  // 设置字体颜色为红色

    xlsx.write(2, 2, "中文",format);

    xlsx.setRowHeight(4, 50);

    xlsx.setColumnWidth(3, 100);

    xlsx.mergeCells("G4:L6");

    QXlsx::CellRange cells(3,3,5,5);

    xlsx.mergeCells(cells);

    xlsx.saveAs("Text.xlsx");

}

void Dialog::on_pushButton_2_clicked()

{

    QXlsx::Document xlsx("Text.xlsx");

    QStringList sheetList = xlsx.sheetNames();

    QString strsheetName;

    foreach (auto var, sheetList)

    {

        if(var == "2")

            strsheetName ="2";

    }

    QXlsx::Workbook *wb = xlsx.workbook();

    int nsheetCount = wb->sheetCount();

    QString strtext1 = xlsx.read(1,2).toString();

    xlsx.selectSheet(strsheetName);

    QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(wb->sheet(1));

    int row1 = xlsx.dimension().rowCount();

    int row2 = workSheet->dimension().rowCount();

    int col1 = xlsx.dimension().columnCount();

    int col2 = workSheet->dimension().columnCount();

    QString strtext2 = xlsx.read(2,2).toString();

    xlsx.unmergeCells("G4:L6");

    workSheet = static_cast<QXlsx::Worksheet*>(wb->sheet(0));

    QString strtext3 = xlsx.read(1,2).toString();

    QString strtext4 = xlsx.read(2,2).toString();

}

Linux平台

环境:麒麟桌面版 +  qt5.12.2

QtXlsx源码嵌入QTCreator中使用

在linux平台上也可以直接拿qtxlsx源码直接在项目上使用。

在测试项目test1xlsx的pro文件添加配置,调用方法和上面windows一样。

include($$PWD/../QtXlsxWriter-master/src/xlsx/qtxlsx.pri)

QtXlsx源码编译成为so库使用
编译QtXlsx源码

在linux系统上无lib文件的,只有生成so文件。直接使用qt编译qtxlsx项目即可。

使用QtXlsx库

和windows一样的使用办法。

区别是:

1.在编译测试项目textxlsx遇到错误GL/gl.h: No such file or directory。解决办法是:

sudo apt-get install mesa-common-dev

sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev

2.头文件的QtXlsx的文件#include <QtXlsx/QtXlsxDepends>需改成#include <QtXlsxDepends>

QtXlsx常用函数

  1. 定义

QXlsx::Document xlsx;

QXlsx::Document xlsx("Text.xlsx");

  1. 往单元格中写入数据

xlsx.write(2, 2, "中文");         参数一是行,参数二是列,参数三是数据

  1. 读取单元格中的数据

QString str1 = xlsx.read(1, 1).toString();        指定行列获取

  1. 设置行高

xlsx.setRowHeight(4, 30);        设置第四行高度为30

  1. 设置列宽

xlsx.setColumnWidth(3, 50);         设置第三列宽度为50

  1. 设置单元格样式

QXlsx::Format format;

format.setFontColor(Qt::red);                  // 设置字体颜色为红色

xlsx.write(2, 2, "中文",format);

  1. 合并单元格

xlsx.mergeCells("C4:E6");        参数指定那个单元格区间

  1. 取消合并

xlsx.unmergeCells("C4:E6");  指定的单元格区间一定是要已经合并的,否则报错

  1. 添加工作表

xlsx.addSheet("sheet_2");        添加这一张名为“sheet_2”的工作表

  1. 工作表重命名

xlsx.workbook()->renameSheet(1, "sheet_3");       

  1. 选择当前工作表

xlsx.selectSheet("sheet_3");        选择名为“sheet_3”的工作表为当前xlsx工作表

  1. 获得所有工作表的名字

QStringList sheetList = xlsx.sheetNames();        获取返回的是一个字符串链表

  1. 获取工作簿对象

QXlsx::Workbook *workBook = xlsx.workbook();

  1. 获取当前工作簿的第一张sheet工作表

QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));

  1. 获取当前sheet表所使用到的行数

int row = workSheet->dimension().rowCount();

  1. 获取当前sheet表所使用到的列数

int colum = workSheet->dimension().columnCount();

  1.  保存

xlsx.saveAs("Text.xlsx");   初始化xlsx对象时没有指定excel文件,那么保存时使用这个

xlsx.save();        初始化xlsx对象时,指定了excel文件,那么保存时使用这个

  1.  赋值

xlsx.defineName("Factor", "=0.5");         // 将0.5赋值给Factor,相当于变量赋值一样

  1. 使用公式

xlsx.write(11, 1, "=SUM(Cell_1)");  // 计算A1-A10数据总和,并写入(11,1)单元格中

xlsx.write(15, 1, "=SUM($A$1:$A$10)");  // 计算A1-A10数据总和,并写入(15,1)单元格中

使用公式和变量

xlsx.write(12, 1, "=SUM(Cell_1)*Factor");   // 计算A1-A10数据总和再乘以0.5,并写入(12,1)单元格中

xlsx.write(16, 1, "=SUM($A$1:$A$10)*Factor"); // 计算A1-A10数据总和再乘以0.5,并写入(16,1)单元格中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)

4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇 一个人简介二机器学习基础2.1 监督学习与无监督学习2.1.1 监督学习&#xff1a;2.1.2 无监督学习&#xff1a; 2.2 特征工程2.3 常用机器学习算法概述2.3.1 监督学习算法&#xff1a;2.3.2 无监督学习算法&#…

Phoenix伪分布安装

引言 Phoenix是构建在HBase上的一个SQL层&#xff0c;能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表&#xff0c;插入数据和对HBase数据进行查询。Phoenix完全使用Java编写&#xff0c;作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫…

【保姆级讲解如何构建Python虚拟环境】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

SAP 前台处理:CO主数据之成本要素组创建-<KAH1>

一、背景 本章是成本要素主数据创建的续章&#xff0c;后续会用到成本费用的分摊分配&#xff0c;费用的统计中。 也是成本控制篇的内容之一 成本控制分主数据篇和业务篇&#xff1a; 主数据篇主要内容&#xff1a; 成本要素、成本中心、订单、作业类型、统计指标、工作中…

微服务(基础篇-006-Docker)

Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff08;类似 iPhone 的 app&…

【一】TensorFlow神经网络模型构建之神经元函数及优化方法

TensorFlow神经网络模型构建主要涉及如下几块&#xff1a;神经元函数、卷积函数、池化函数、分类函数、优化方法。下面分别对这几块进行展开说明&#xff1a; 神经元函数及优化方法 神经网络之所以能解决非线性问题&#xff08;如语音、图像识别等&#xff09;&#xff0c;本…

互联网公司裁员现象调查:探寻背后原因与应对策略

近年来&#xff0c;随着互联网行业的快速发展&#xff0c;裁员现象日益引起广泛关注。本文通过对互联网公司裁员现象的调查&#xff0c;分析背后原因&#xff0c;探讨应对策略&#xff0c;以期为互联网企业和求职者提供参考。 近年来&#xff0c;我国互联网行业历经高速发展&am…

Uibot6.0 (RPA财务机器人师资培训第4天 )批量开票机器人案例实战

类似于小北之前发布的一篇博客&#xff08;不能说很像&#xff0c;只能说是一模一样&#xff09; Uibot (RPA设计软件&#xff09;财务会计Web应用自动化(批量开票机器人&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/136782171?spm1001.2014.3001.…

软考中级——软件设计师真题中的一些知识总结

2023年5月考过了软考中级——软件设计师&#xff0c;一次通过&#xff0c;两科成绩分别是入下。 做上午真题的时候积累了一些易错题&#xff0c;分享一下~~ 2014年5月 1、木马程序&#xff1a;是一种寻找计算机后门&#xff0c;伺机窃取被控计算机中的密码和重要文件等&#…

Apache Hive的基本使用语法

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库&#xff08;如果有表会报错&#xff09; drop database myhive;…

[STM32] Keil 创建 HAL 库的工程模板

Keil 创建 HAL 库的工程模板 跟着100ASK_STM32F103_MINI用户手册V1.1.pdf的第7章步骤进行Keil工程的创建。 文章目录 1 创建相关文件夹2 创建“main.c/h”和“stm32f1xx_clk.c/h”3 复制CMSIS和HAL库4 创建新的Keil工程5 添加组文件夹和工程文件6 配置Keil设置 1 创建相关文件…

Python处理文件系统路径库之pathlib使用详解

概要 Python的pathlib库提供了一种面向对象的方法来处理文件系统路径。它使得路径操作更加直观和易于管理,相比于传统的os.path模块,pathlib提供了更为丰富和灵活的API。 pathlib库 pathlib模块在Python中用于处理文件系统路径。通过使用面向对象的方法,它允许路径表示为P…

MySQL高级SQL2

一、表连接 二、视图 三、null值和空值区别 四、存储过程 五、函数 六、字符串函数 七、日期时间函数

Elastic 8.13:Elastic AI 助手中 Amazon Bedrock 的正式发布 (GA) 用于可观测性

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.13 的正式发布。 有什么新特性&#xff1f; 8.13 版本的三个最重要的组件包括 Elastic AI 助手中 Amazon Bedrock 支持的正式发布 (general availability - GA)&#xff0c;新的向量…

东方博宜 1553. 数列求和

东方博宜 1553. 数列求和 #include<iostream> using namespace std; int main() {int n ; cin >> n ;int sum ;sum 0 ;for(int i 1 ; i < n ; i){sum i*i ;}cout << sum ; }

Spring-ThreadLocal内存泄漏原因及解决办法

ThreadLocal原理回顾 ThreadLocal的原理&#xff1a;每个Thread内部维护着一个ThreadLocalMap&#xff0c;它是一个Map。这个映射表的Key是一个弱引用&#xff0c;其实就是ThreadLocal本身&#xff0c;Value是真正存的线程变量Object。 也就是说ThreadLocal本身并不真正存储线…

Vastbase编程利器:PL/pgSQL原理简介

PL/pgSQL是Vastbase提供的一种过程语言&#xff0c;在普通SQL语句的使用上增加了编程语言的特点&#xff0c;可以用于创建函数、存储过程、触发器过程以及创建匿名块等。 本文介绍Vastbase中PL/pgSQL的执行流程&#xff0c;包括PL/pgSQL的编译与运行。 1、编译 PL/pgSQL的编译…

基于深度学习的心律异常分类算法

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

金三银四-探秘银行科技部:稳定职业背后的挑战 | 不敢跳槽啦 | 好慌

小伙伴们好&#xff0c;我是「 行走的程序喵」&#xff0c;感谢您阅读本文&#xff0c;欢迎三连~ &#x1f63b; 【Java基础】专栏&#xff0c;Java基础知识全面详解&#xff1a;&#x1f449;点击直达 &#x1f431; 【Mybatis框架】专栏&#xff0c;入门到基于XML的配置、以…

数据结构——二叉搜索树详解

一、二叉搜索树定义 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1.非空左子树上所有节点的值都小于根节点的值。 2.非空右子树上所有节点的值都大于根节点的值。 3.左右子树也都为二叉搜索树。 如下图所示&#xff1a…