当前位置: 首页 > 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的读写 ↩︎

相关文章:

  • Android 中的动态应用程序图标
  • 蓝桥杯练习题-图书ISBN号码
  • 低代码与人工智能:实现智能化办公的利器
  • 糊涂工具包使用 记录
  • 空间域:空间组学的耶路撒冷
  • 网络安全知识和华为防火墙
  • 手机壳也能散热了?
  • 使用 create-react-app 创建 react 应用
  • 关机恶搞小程序
  • input框不能输入
  • 代码随想录算法训练营第35天 | 860.柠檬水找零 + 406.根据身高重建队列 + 452.用最少数量的箭引爆气球
  • [GN] 设计模式——面向对象设计原则概述
  • 【游戏服务器部署】幻兽帕鲁服务器一键部署保姆级教程,游戏私服还是自己搭建的香
  • 全球工控大佬
  • 基于 NXP S32K311 评估板的方案
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Angular4 模板式表单用法以及验证
  • CentOS从零开始部署Nodejs项目
  • CSS中外联样式表代表的含义
  • FineReport中如何实现自动滚屏效果
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java读取Properties文件的六种方法
  • Python利用正则抓取网页内容保存到本地
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue--数据传输
  • Vue小说阅读器(仿追书神器)
  • 力扣(LeetCode)357
  • 全栈开发——Linux
  • 如何用vue打造一个移动端音乐播放器
  • 智能网联汽车信息安全
  • - 转 Ext2.0 form使用实例
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​如何防止网络攻击?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (BFS)hdoj2377-Bus Pass
  • (day 12)JavaScript学习笔记(数组3)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (二)fiber的基本认识
  • (二十四)Flask之flask-session组件
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (过滤器)Filter和(监听器)listener
  • (四)鸿鹄云架构一服务注册中心
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)【Hibernate总结系列】使用举例
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***监测系统的构建(chkrootkit )
  • .naturalWidth 和naturalHeight属性,
  • .Net Core和.Net Standard直观理解
  • .NET 发展历程
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net中我喜欢的两种验证码
  • .Net组件程序设计之线程、并发管理(一)
  • .project文件
  • /var/spool/postfix/maildrop 下有大量文件