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)单元格中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

puzzle(1122)连线迷宫

目录 一&#xff0c;连线迷宫-经典模式 1&#xff0c;规则 2&#xff0c;策略 3&#xff0c;调整的局部性 4&#xff0c;八连通端点的线条合并 taptap小游戏 迷宫解谜 连线迷宫模式 一&#xff0c;连线迷宫-经典模式 1&#xff0c;规则 2&#xff0c;策略 分2步&#x…

Kali远程操纵win7

一.准备 1.介绍 攻击方&#xff1a;kali IPV4:192.168.92.133 被攻击方&#xff1a;win7 IPV4:192.168.92.130 2.使用永恒之蓝漏洞 (1.使用root权限 (2.进入msfconsole (3.添加rhosts (4.run进行一下 二.进行远程操作 1.获取用户名和密码 在cmd5查询 2.获取syste…

Windows下如何查看端口被谁占用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 开始时经常遇到这种…

LVS负载均衡-DR模式配置

LVS&#xff1a;Linux virtual server ,即Linux虚拟服务器 LVS自身是一个负载均衡器&#xff08;Director&#xff09;&#xff0c;不直接处理请求&#xff0c;而是将请求转发至位于它后端的真实服务器real server上。 LVS是四层&#xff08;传输层 tcp/udp&#xff09;负载均衡…

SpringBoot SpringMVC (详解)

6. SpringBoot Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 是为了快速开发 Spring 程序开发而诞生的。 Spring Boot 的优点&#xff1a; 快速集成框架&#xff0c;Spring Boot 提供了启动添加依赖的功能&#xff0c;⽤于秒级集成各种框架。内置运⾏…

来了!小学生Python创意编程(视频教学版)

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 在最好的年纪&#xff0c;一起来学Python吧&#xff01;本期博主给大家推荐一本适合小学生阅读的书籍&#xff0c;一起来看看吧~ 推荐图书 小学生Python创意编程&#xff08;视频教学版&#xff09; 直达链接&#x…

uniapp输入框事件(防抖)

一、描述 在输入框输入内容或者说输入关键词的时候&#xff0c;往往都要进行做防抖处理。如果不做防抖&#xff0c;你输入什么&#xff0c;动态绑定的数据就会保持一致。这样不好吗&#xff0c;同步获取。有个业务场景&#xff0c;如果是搜索框&#xff0c;你每次一个字符&…

【差分约束+并查集】第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

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

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

mamba的学习记录

最近新出了一种很火的架构mamba&#xff0c;听说吊打transformer&#xff0c;特此学习一下&#xff0c;总结一下学习的内容。 state-spaces/mamba (github.com)3个月8Kstar&#xff0c;确实有点受欢迎。 目录 1.先验 RNN​ LSTM ​2.mamba State Space Models​ Selecti…

两个有序序列的中位数(全网首篇递归、分治解决)

题目描述 已知有两个等长非降序序列 S 1 S_1 S1​和 S 2 S_2 S2​。先将 S 1 S_1 S1​和 S 2 S_2 S2​ 合并为 S 3 S_3 S3​ &#xff0c;求 S 3 S_3 S3​的中位数。 输入描述 第一行&#xff0c;序列 S 1 S_1 S1​ 和 S 2 S_2 S2​ 的长度 N N N , 第二行&#xff…

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

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

JAVA面试大全之并发篇

目录 1、并发基础 1.1、多线程的出现是要解决什么问题的? 本质什么? 1.2、Java是怎么解决并发问题的? 1.3、线程安全有哪些实现思路? 1.4、如何理解并发和并行的区别? 1.5、线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式? 1.6、通常线程有哪几…

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境&#xff1a;Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…

Elastic Search 8.13: 为开发者简化嵌入和排名

作者&#xff1a;来自 Elastic Alvin Richards, Ranjana Devaji Elasticsearch 8.13 扩展了能力&#xff0c;使开发者能够利用人工智能和机器学习模型创建快速和卓越的搜索体验。与 Apache Lucene 9.10 集成&#xff0c;测量向量搜索性能在基准测试中超过 2 倍&#xff0c;扩展…

基于springboot+vue+Mysql的酒店管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

git配置SSH 密钥

git配置SSH 密钥 1.window配置ssh1.安装ssh2.安装 Git&#xff08;安装教程参见安装Git&#xff09;并保证版本大于 1.9![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e59f4e16b83c45649f1d9d7bd6bf92c0.png)3.SSH 尽量保持最新&#xff0c;6.5之前的版本由于使用…

【保姆级讲解如何Chrome安装Vue-devtools的操作】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

ruoyi-nbcio-plus基于vue3的flowable其它元素(目前主要是元素文档)的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

深度好文:解决Ubuntu 18.04安装nvidia显卡驱动,导致内核不匹配:无需重装系统修复内核

深度好文&#xff1a;解决Ubuntu 18.04安装nvidia显卡驱动&#xff0c;导致内核不匹配&#xff1a;无需重装系统修复内核 目录 一、问题描述二、尝试修复三、安装Nvidia驱动和CUDA并配置cuDNN四、总结 一、问题描述 昨天打算更新一下Ubuntu 18.04的显卡驱动&#xff0c;以支持…