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.rhkb.cn/news/288888.html

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

相关文章

以太网链路聚合——增加带宽,解决生成树收敛慢的问题

目录 一.对STP生成树的补充 1.STP接口状态 2.STP生成树的改进 二.网络可靠性 1.单板可靠性 2.设备可靠性 3.链路可靠性 三.链路聚合 1.多条链路聚合增加带宽 2.链路聚合术语 四.链路聚合模式 1.手动模式 2.LASP模式 &#xff08;1).LASP术语 &#xff08;2&…

头歌 实验二 Java类编程实验

头歌 实验二 Java类编程实验 制作不易&#xff0c;点个关注&#xff01;给大家带来更多的价值&#xff01; 目录 头歌 实验二 Java类编程实验制作不易&#xff0c;点个关注&#xff01;给大家带来更多的价值&#xff01;第一关&#xff1a; 编写一个代表三角形的类第二关&…

智慧公厕,让数据和技术更好服务社会生活

智慧公厕&#xff0c;作为智慧城市建设中不可忽视的一部分&#xff0c;正逐渐受到越来越多人的关注。随着科技的不断进步&#xff0c;智能化公厕已经成为一种趋势&#xff0c;通过数据的流转和技术的整合&#xff0c;为社会生活带来了更好的服务。本文以智慧公厕源头实力厂家广…

密码学 总结

群 环 域 群 group G是一个集合&#xff0c;在此集合上定义代数运算*&#xff0c;若满足下列公理&#xff0c;则称G为群。 1.封闭性 a ∈ G , b ∈ G a\in G,b\in G a∈G,b∈G> a ∗ b ∈ G a*b\in G a∗b∈G 2.G中有恒等元素e&#xff0c;使得任何元素与e运算均为元素本…

dataguard配置SYNC导致数据库性能频繁卡顿

获取卡时间段的堵塞事件&#xff0c;发现大部分事件是“cursor: pin S wait on X”&#xff0c;“log file parallel write”&#xff0c;“LGWR-LNS wait on channel”等根据blocking_session的堵塞源进行查询&#xff0c;最终查到源头&#xff0c;发现堵塞在文件号为2&#x…

C++第十三弹---内存管理(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、operator new与operator delete函数 1.1、operator new与operator delete函数 2、new和delete的实现原理 2.1、内置类型 2.2、自定义类型 …

【爬虫基础】第4讲 GET与POST请求

GET请求 GET请求是一种HTTP方法&#xff0c;用于向服务器获取&#xff08;或读取&#xff09;数据。它是Web开发中最常用的请求方式之一。对于GET请求&#xff0c;客户端向服务器发送一个HTTP请求&#xff0c;服务器返回请求的资源。GET请求通常用于获取静态资源&#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;…

【Redis】Redis 介绍Redis 为什么这么快?Redis数据结构Redis 和Memcache区别 ?为何Redis单线程效率也高?

目录 Redis 介绍 Redis 为什么这么快&#xff1f; Redis数据结构 Redis 和Memcache区别 &#xff1f; 为何Redis单线程效率也高&#xff1f; Redis 介绍 Redis 是一个开源&#xff08;BSD 许可&#xff09;、基于内存、支持多种数据结构的存储系统&#xff0c;可以作为数据…

专题:一个自制代码生成器(嵌入式脚本语言)之应用实例

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;一个自制代码…

信号处理--基于FBCSP滤波方法的运动想象分类

目录 理论 工具 方法 代码获取 理论 通用空间模式 (CSP) 算法可以用来有效构建最佳空间滤波器区分&#xff0c;然后实现运动想象的数据中的脑电信号的区分。然而&#xff0c;空间滤波器性能的好坏主要取决于其工作频带。如果脑电信号没有经过滤波或者滤波的频带范围不合适…

如何选择适合自己的软文推广平台

随着新媒体的兴起&#xff0c;越来越多的企业关注软文的推广&#xff0c;一篇好的软文离不开一个好的发布渠道。如何选择合适的发稿平台已经成为很多企业的痛点&#xff0c;所以我会根据自己的经验介绍一个常见的发稿平台。 1.门户网站 门户网站&#xff0c;这里就不解释哪些网…

【虹科分享】前Tableau工程师展示Domo如何与Tableau和Power BI高效结合

文章速览&#xff1a; Domo如何与Tableau协同工作如何将Domo数据集连接到Tableau工作簿如何从Domo连接到Tableau数据提取Domo如何与Power BI协同工作 现有的BI工具的不足该如何弥补&#xff0c;前Tableau工程师Tanner Brockbank的建议是&#xff0c;取长补短&#xff0c;结合…

Jenkins升级中的小问题

文章目录 使用固定版本安装根据jenkins页面下载war包升级jenkins重启jenkins报错问题解决 K8s部署过程中的一些小问题 ##### Jenkins版本小插曲 ​ 在Jenkins环境进行插件安装时全部清一色飘红&#xff0c;发现是因为Jenkins版本过低导致&#xff0c;报错的位置可以找到更新je…

【动手学深度学习】深入浅出深度学习之线性神经网络

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 线性回归 &#x1f33b;1.1 矢量化加速 &#x1f33b;1.2 正态分布与平方损失 &#x1f33c;2. 线性回归的从零开始实现 &#x1f33b;2.1. 生成数据集 &#x…

网络安全:Kali Linux 进行SQL注入与XSS漏洞利用

目录 一、实验 1.环境 2.Kali Linux 进行SQL注入 3.Kali Linux 进行XSS漏洞利用 二、问题 1.XSS分类 2.如何修改beef-xss的密码 3.beef-xss 服务如何管理 4.运行beef报错 5.beef 命令的颜色有哪些区别 6.owasp-top-10 有哪些变化 一、实验 1.环境 &#xff08;1&a…

2024年腾讯云4核8g服务器并发数、优惠价格、支持多少人在线?

腾讯云4核8G服务器价格&#xff1a;轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线&#xff1f;支持30个并发数&#xff0c;可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…

Chrome之解决:浏览器插件不能使用问题(十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

C程序编译、链接与项目构建

C程序编译、链接与项目构建 摘要C编译环境静、动态库介绍gcc与g和程序编译、链接Visual Studio创建和链接库动态库的显示调用Windows下显示动态库的加载/查找方式 Make介绍安装使用 CMake介绍安装使用构建方式内部构建外部构建构建使用静/动态库常用[系统]变量常用指令CMake模块…

YOLOv9改进策略:block优化 | Transformer架构ConvNeXt 网络在检测中大放异彩

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩&#xff0c;同时对比 Swin-T 模型&#xff0c;在多种任务中其模型的大小和准确率均有一些提升&#xff0c;模型的 FLOPs 较大的减小且 Acc …