当前位置: 首页 > news >正文

Qt Excel读写 - QXlsx的安装配置以及测试

Qt Excel读写 - QXlsx的安装配置以及测试

  • 引言
  • 一、安装配置
  • 二、简单测试

引言

Qt无自带的库处理Excel 文件,但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写Microsoft Excel文件的C++库。它提供了一组简单易用的API,可以方便地创建、修改和操作Excel文件。

可参考:
https://github.com/QtExcel/QXlsx 官方源码
https://gitcode.com/qtexcel/qxlsx/overview?utm_source=csdn_github_accelerator&isLogin=1 官方源码 - gitCode(GitHub加速计划 - 推荐)
https://blog.csdn.net/qq_36393978/article/details/132542318 使用 QAxObject 高效任意读写 Excel 表1
https://blog.csdn.net/techenliu/article/details/133089775 QT之excel的读写2

一、安装配置

    1. 下载源码,如下图所示,QXlsx就是核心代码,里面还包含了很多示例。
      在这里插入图片描述
    1. 创建一个工程,控制台或者带界面的都可以,将QXlsx复制到工程目录下。
      在这里插入图片描述
    1. .pro文件中添加以下语句,将QXlsx添加到工程中,保存pro文件 (自动会执行qmake 或自己手动执行) :
# QXlsx code for Application Qt project
QXLSX_PARENTPATH=./QXlsx/         # current QXlsx path is . (. means curret directory)
QXLSX_HEADERPATH=./QXlsx/header/  # current QXlsx header path is ./header/
QXLSX_SOURCEPATH=./QXlsx/source/  # current QXlsx source path is ./source/
include(./QXlsx/QXlsx.pri)

在这里插入图片描述

二、简单测试

    1. 创建一个.xlsx文件,对单元格赋值,保存到磁盘上。
      在这里插入图片描述
#include "mainwindow.h"
#include <QApplication>// QXlsx
#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"int main(int argc, char *argv[])
{
//    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();//    return a.exec();// 测试QXlsxQXlsx::Document xlsx;xlsx.write("A1", "A1");   // (A,1)  第一行第一列xlsx.write(1, 2, "A2");   // (A,2)  第一行第二列xlsx.saveAs("Test.xlsx"); // 保存return 0;
}
    1. 读取一个.xlsx文件,输出到控制台。(使用官方的ShowConsole代码)
      修改官方代码.pro文件,配置添加QXlsx。修改xlsxFileName为刚才生成的Test.xlsx,运行即可。
      在这里插入图片描述
// main.cpp#include <iostream>
#include <vector>#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QVariant>
#include <QtCore>
#include <QtGlobal>
using namespace std;// [0] include QXlsx headers
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxchartsheet.h"
#include "xlsxdocument.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;#include "fort.hpp" // libfortint main(int argc, char *argv[])
{QCoreApplication app(argc, argv);// get xlsx file nameQString xlsxFileName = "Test.xlsx";qDebug() << xlsxFileName;// tried to load xlsx using temporary documentQXlsx::Document xlsxTmp(xlsxFileName);if (!xlsxTmp.isLoadPackage()) {qCritical() << "Failed to load" << xlsxFileName;return (-1); // failed to load}// load new xlsx using new documentQXlsx::Document xlsxDoc(xlsxFileName);xlsxDoc.isLoadPackage();int sheetIndexNumber = 0;foreach (QString curretnSheetName, xlsxDoc.sheetNames()) {QXlsx::AbstractSheet *currentSheet = xlsxDoc.sheet(curretnSheetName);if (NULL == currentSheet)continue;// get full cells of sheetint maxRow = -1;int maxCol = -1;currentSheet->workbook()->setActiveSheet(sheetIndexNumber);Worksheet *wsheet = (Worksheet *) currentSheet->workbook()->activeSheet();if (NULL == wsheet)continue;QString strSheetName = wsheet->sheetName(); // sheet name// display sheet namestd::cout << std::string(strSheetName.toLocal8Bit()) << std::endl;QVector<CellLocation> clList = wsheet->getFullCells(&maxRow, &maxCol);QVector<QVector<QString>> cellValues;for (int rc = 0; rc < maxRow; rc++) {QVector<QString> tempValue;for (int cc = 0; cc < maxCol; cc++) {tempValue.push_back(QString(""));}cellValues.push_back(tempValue);}for (int ic = 0; ic < clList.size(); ++ic) {// cell locationCellLocation cl = clList.at(ic);int row = cl.row - 1;int col = cl.col - 1;// https://github.com/QtExcel/QXlsx/commit/9ab612ff5c9defc35333799c55b01be31aa66fc2// {{// QSharedPointer<Cell> ptrCell = cl.cell; // cell pointerstd::shared_ptr<Cell> ptrCell = cl.cell; // cell pointer// value of cell// QVariant var = cl.cell.data()->value();QVariant var = ptrCell->value();// }}QString str = var.toString();cellValues[row][col] = str;}fort::table fortTable;for (int rc = 0; rc < maxRow; rc++) {for (int cc = 0; cc < maxCol; cc++) {QString strTemp = cellValues[rc][cc];fortTable << std::string(strTemp.toLocal8Bit()); // display value}fortTable << fort::endr; // change to new row}std::cout << fortTable.to_string() << std::endl; // display forttable rowsheetIndexNumber++;}return 0;
}

  1. https://blog.csdn.net/qq_36393978/article/details/132542318 使用 QAxObject 高效任意读写 Excel 表 ↩︎ ↩︎

  2. https://blog.csdn.net/techenliu/article/details/133089775 QT之excel的读写 ↩︎

相关文章:

Qt Excel读写 - QXlsx的安装配置以及测试

Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件&#xff0c;但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库&#xff1a;QXlsx&#xff0c;一个基于Qt库开发的用于读写Microsoft Excel文…...

【报错处理】ModuleNotFoundError: No module named ‘paddle.fluid‘

引言 在使用 UIE&#xff08;统一信息提取&#xff09;模型时&#xff0c;您可能会遇到错误消息 "ModuleNotFoundError: No module named paddle.fluid"。这个错误可能让人沮丧&#xff0c;但通常很容易解决。在本博客文章中&#xff0c;我将为您介绍解决此问题。 一…...

Wpf 使用 Prism 实战开发Day16

客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中&#xff0c;使用NuGet 安装两个库 RestSharp Newtonsoft.Json 一. RestSharp 简单的使用测试例子 当前章节主要目的是&#xff1a;对RestSharp 库&#xff0c;根据项目需求再次进行封装。下面先做个简单的使用…...

八斗学习笔记

1 初始环境安装 Anaconda安装(一款可以同时创建跟管理多个python环境的软件) https://blog.csdn.net/run_success/article/details/134656460 Anaconda创建一个新python环境(安装人工智能常用的第三方python包&#xff0c;如&#xff1a;tensorflow、keras、pytorch) https://…...

【Uni-App】Vuex在vue3版本中的使用与持久化

Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 简而言之就是用来存数据&#xff0c;可以有效减少使用组件传参出现的问题。 基本元素&#xff1a;…...

基于Qt 音乐播放器mp3(进阶)

​## 项目工具 工具名QtQt 5.14.2图标设计Adobe Ai音频素材剪映平台windowsgif录制ScreenGif录屏Win10 自带录屏 Win + G## 项目演示 先点击构建项目,项目构建完成后,再将本例的 myMusic 歌曲文件夹拷贝到可执行程序...

力扣唯一元素的和

题目&#xff1a; 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,2] 输出&#xff1a;4 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4 。示例 2&#xf…...

力扣(leetcode)第169题多数元素(Python)

169.多数元素 题目链接&#xff1a;169.多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&am…...

springBoot - mybatis 多数据源实现方案

应用场景: 多数据源 小型项目 或者 大项目的临时方案中比较常用.在日常开发中,可能我们需要查询多个数据库,但是数据库实例不同,导致不能通过 指定schema的方式 区分不同的库, 这种情况下就需要我们应用程序配置多数据源 实现方式: 首先自定义实现 datasource数据源 为当前…...

unity 讯飞webapi在线语音合成

websocker插件使用的unitywebsocker 讯飞webapi&#xff0c;连接后只能请求一次&#xff0c;所以每次使用时进行连接&#xff0c;连接成功后进行请求&#xff0c;请求完成后关闭连接。 为什么连接后只能请求一次呢&#xff0c;可能是方便统计使用量。 如何通过音频数据计算出…...

[NCTF2019]Fake XML cookbook(特详解)

先试了一下弱口令&#xff0c;哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…...

腾讯云SDK并发调用优化方案

目录 一、概述 二、 网关的使用 2.1 核心代码 三、腾讯云SDK依赖包的改造 一、概述 此网关主要用于协调腾讯云SDK调用的QPS消耗&#xff0c;使得多个腾讯云用户资源能得到最大限度的利用。避免直接使用腾讯云SDK 时&#xff0c;在较大并发情况下导致接口调用异常。网关的工…...

【排序算法】C语言实现随机快排,巨详细讲解

文章目录 &#x1f680;前言&#x1f680;快排的核心过程partition&#xff08;划分过程&#xff09;&#x1f680;快排1.0&#x1f680;随机快速排序&#x1f680;稳定性 &#x1f680;前言 铁子们好啊&#xff01;继续我们排序算法今天要讲的是快排&#xff0c;通常大家所说…...

Java强训day13(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…...

搭建WebGL开发环境

前言 本篇文章介绍如何搭建WebGL开发环境 WebGL WebGL的技术规范继承自免费和开源的OpenGL ES标准&#xff0c;从某种意义上说&#xff0c;WebGL就是Web版的OpenGL ES&#xff0c;而OpenGL ES是从OpenGL中派生出来的。他们的应用环境有区别&#xff0c;一般来说&#xff1a;…...

学习嵌入式第十五天之结构体

用变量a给出下面的定义 a) 一个整型数&#xff08;An integer&#xff09; //int a;b) 一个指向整型数的指针&#xff08;A pointer to an integer&#xff09; //int *a;c) 一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数&#xff08;A pointer to a poin…...

【HDFS】一天一个RPC系列--updateBlockForPipeline

本文目标是: 弄清updateBlockForPipeline这个RPC的作用。弄清updateBlockForPipeline RPC的使用场景,代码里的调用点。一、updateBlockForPipeline的作用 其定义在ClientProtocol接口里,是Client与NameNode之间的接口。 看其代码注释描述: 为一个under construction状态下…...

测试面试题(0101设计测试用例关键)

1. 测试计划 测试范围&#xff0c;本次改动的模块&#xff0c;新增了哪些功能测试策略&#xff0c;包含测试依据&#xff0c;测试准入标准&#xff0c;准出标准&#xff0c;测试重点及方法&#xff08;确认功能的优先级&#xff09;&#xff0c;测试工具的选择测试管理&#x…...

C++ 数论相关题目:高斯消元解异或线性方程组

输入一个包含 n 个方程 n 个未知数的异或线性方程组。 方程组中的系数和常数为 0 或 1 &#xff0c;每个未知数的取值也为 0 或 1 。 求解这个方程组。 异或线性方程组示例如下&#xff1a; M[1][1]x[1] ^ M[1][2]x[2] ^ … ^ M[1][n]x[n] B[1] M[2][1]x[1] ^ M[2][2]x[2]…...

嵌入式学习第十四天

1.结构体&#xff08;2&#xff09;: &#xff08;1&#xff09;结构体类型定义 &#xff08;2&#xff09;结构体变量的定义 &#xff08;3&#xff09;结构体元素的访问 &#xff08;4&#xff09;结构体的存储: 内存对齐: char 按照1字节对齐 …...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...