Qt优秀开源项目之二十四:EXCEL读写利器QXlsx

QXlsx是基于Qt5/Qt6的Excel文件(*.xlsx)的读写库。
github地址:https://github.com/QtExcel/QXlsx
QXlsx既可以编译成库,也可以直接引用源码QXlsx-master\QXlsx\QXlsx.pri
QXls提供了非常丰富的Examples,比如:

1️⃣ 读单元格数据

using namespace QXlsx;Document doc("ReadExcel.xlsx");
if (!doc.load())return false;int row = 1; int col = 1;
QVariant var = doc.read( row, col );
// check type of var for more information
qDebug() << var.toString(); 

2️⃣ 写单元格数据

QVariant writeValue = QString("hello"); // you can use QString, double(or int), QDateTime, QDate, QTime
int row = 1; int col = 1;
doc.write(row, col, writeValue);doc.saveAs("datetime.xlsx");

3️⃣ 添加sheet

doc.addSheet("added sheet"); // add a sheet. current sheet is 'added sheet'.
int row = 1; int col = 1;
QVariant var = doc.read( row, col );

4️⃣ 选择sheet

doc.selectSheet("added sheet"); // select a sheet. current sheet is 'added sheet'.
int row = 1; int col = 1;
QVariant var = doc.read( row, col );

5️⃣ 读所有sheet的数据

using namespace QXlsx;
Document xlsxDoc;// ...int sheetIndexNumber = 0;
foreach( QString currentSheetName, xlsxDoc.sheetNames() )
{// get current sheet AbstractSheet* currentSheet = xlsxDoc.sheet( currentSheetName );if ( NULL == currentSheet )continue;// get full cells of current 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 nameqDebug() << strSheetName; 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 ){CellLocation cl = clList.at(ic); // cell locationint row = cl.row - 1;int col = cl.col - 1;QSharedPointer<Cell> ptrCell = cl.cell; // cell pointer// value of cellQVariant var = cl.cell.data()->value();QString str = var.toString();cellValues[row][col] = str;}for (int rc = 0; rc < maxRow; rc++){for (int cc = 0; cc < maxCol; cc++){QString strCell = cellValues[rc][cc];qDebug() << "( row : " << rc << ", col : " << cc << ") " << strCell; // display cell value}}sheetIndexNumber++;
}

6️⃣ 日期和时间

  • Code
using namespace QXlsx;Document doc;doc.write( "A1", QVariant(QDateTime::currentDateTimeUtc()) );
doc.write( "A2", QVariant(double(10.5)) );
doc.write( "A3", QVariant(QDate(2019, 10, 9)) );
doc.write( "A4", QVariant(QTime(10, 9, 5)) );
doc.write( "A5", QVariant((int) 40000) );qDebug() << "doc.read()";
qDebug() << doc.read( 1, 1 ).type() << doc.read( 1, 1 );
qDebug() << doc.read( 2, 1 ).type() << doc.read( 2, 1 );
qDebug() << doc.read( 3, 1 ).type() << doc.read( 3, 1 );
qDebug() << doc.read( 4, 1 ).type() << doc.read( 4, 1 );
qDebug() << doc.read( 5, 1 ).type() << doc.read( 5, 1 );
qDebug() << "\n";qDebug() << "doc.cellAt()->value()";
qDebug() << doc.cellAt( 1, 1 )->value().type() << doc.cellAt( 1, 1 )->value();
qDebug() << doc.cellAt( 2, 1 )->value().type() << doc.cellAt( 2, 1 )->value();
qDebug() << doc.cellAt( 3, 1 )->value().type() << doc.cellAt( 3, 1 )->value();
qDebug() << doc.cellAt( 4, 1 )->value().type() << doc.cellAt( 4, 1 )->value();
qDebug() << doc.cellAt( 5, 1 )->value().type() << doc.cellAt( 5, 1 )->value();doc.saveAs("datetime.xlsx");
  • Output
doc.read()
QVariant::QDateTime QVariant(QDateTime, QDateTime(2019-10-12 01:25:59.047 대한민국 표준시 Qt::LocalTime))
QVariant::double QVariant(double, 10.5)
QVariant::QDate QVariant(QDate, QDate("2019-10-09"))
QVariant::QTime QVariant(QTime, QTime("10:09:05.000"))
QVariant::double QVariant(double, 40000)doc.cellAt()->value()
QVariant::double QVariant(double, 43750.1)
QVariant::double QVariant(double, 10.5)
QVariant::double QVariant(double, 43747)
QVariant::double QVariant(double, 0.422975)
QVariant::double QVariant(double, 40000)

7️⃣ 单元格的颜色

void printColor(Cell* cell)
{if ( NULL == cell )return;QColor clrForeGround = cell->format().patternForegroundColor();QColor clrBackGround = cell->format().patternBackgroundColor();if ( clrForeGround.isValid() &&clrBackGround.isValid() ){qDebug() << "[debug] color : " << clrForeGround << clrBackGround;}
}

此处省略N个例子............................

除了基本功能外,一些不常用的功能也是提供的,比如分组(类似树结构的折叠和展开):

原文链接:Qt优秀开源项目之二十四:EXCEL读写利器QXlsx-CSDN博客

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

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

相关文章

LED电子看板减少人工记录的错误

在当今快节奏的生产和管理环境中&#xff0c;准确性和效率是企业追求的关键目标。而传统的人工记录方式&#xff0c;常常因人为因素而出现各种错误&#xff0c;影响着企业的决策和运营。然而&#xff0c;随着科技的不断进步&#xff0c;LED 电子看板的出现为解决这一难题提供了…

八股面试3(自用)

基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数&#xff1a;int&#xff0c;long&#xff0c;short&#xff0c;byte 2.浮点类型&#xff1a;float&#xff0c;double 3.字符类型&#xff1a;char 4.布尔类型&…

无法获得下列许可 SOLIDWORKS Standard。 无法从使用许可服务器内读取数据,(-16,10009,10054)

无法获得下列许可 SOLIDWORKS Standard。 无法从使用许可服务器内读取数据&#xff0c;(-16,10009,10054) 错误如图 打开xxclean 扩展功能 服务无法启动

监督学习、无监督学习、半监督学习、强化学习、迁移学习、集成学习分别是什么对应什么应用场景

将对监督学习、无监督学习、半监督学习、强化学习、迁移学习和集成学习进行全面而详细的解释&#xff0c;包括定义、应用场景以及具体的算法/模型示例。 1. 监督学习 (Supervised Learning) 定义&#xff1a;监督学习是一种机器学习方法&#xff0c;其中模型通过已知的输入数…

【深度学习|地学应用】遥感与深度学习:揭示梦柯冰川奥秘的前沿应用与实践解析(二)

【深度学习|地学应用】遥感与深度学习&#xff1a;揭示梦柯冰川奥秘的前沿应用与实践解析&#xff08;二&#xff09; 【深度学习|地学应用】遥感与深度学习&#xff1a;揭示梦柯冰川奥秘的前沿应用与实践解析&#xff08;二&#xff09; 文章目录 【深度学习|地学应用】遥感与…

10.23Python_matplotlib_乱码问题

中英文问题解决方案 在使用 Matplotlib 绘图时&#xff0c;经常会出现中文字体显示问题。以下是一些解决方案&#xff1a; Windows 系统解决方案 在代码开始处添加以下代码&#xff0c;以支持中文显示&#xff1a; import matplotlib.pyplot as plt plt.rcParams[font.sans…

联想与Meta合作基于Llama大模型推出面向PC的个人AI智能体——AI Now | LeetTalk Daily...

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 联想集团昨日在美国西雅图召开年度Tech World大会。联想CEO杨元庆在主题演讲中&#xff0c;与Meta创始人兼CEO马克扎克伯格一道宣布&#x…

10.23六级翻译

be located in / situated 坐落于/位于with an average altitude of 100 meters海拔covers an area of 2.3 millions square kilometers面积with a total area of about 5000 square kilometers面积be covered by覆盖a thickness of 50-80 meters厚度one of the birthplace of发…

《15分钟轻松学Go》教程目录

在AI快速发展的时代&#xff0c;学习Go语言依然很有用。Go语言擅长处理高并发任务&#xff0c;也就是说可以同时处理很多请求&#xff0c;这对于需要快速响应的AI服务非常重要。另外&#xff0c;Go适合用来处理和传输大量数据&#xff0c;非常适合机器学习模型的数据预处理。 …

C++笔记---哈希表

1. 哈希的概念 哈希(hash)又称散列&#xff0c;是一种组织数据的方式。从译名来看&#xff0c;有散乱排列的意思。 本质就是通过哈希函数把关键字Key跟存储位置建立一个映射关系&#xff0c;查找时通过这个哈希函数计算出Key存储的位置&#xff0c;进行快速查找。 STL中的un…

@MassageMapping和@SendTo注解详解

MessageMapping注解是Spring Framework中用于WebSocket消息处理的注解&#xff0c;它用于将特定的消息路径映射到处理器方法上。SendTo注解指定了相应消息应该被发送到的目的地路径。 一、WebSocket配置类&#xff1a; Configuration EnableWebSocketMessageBroker public cl…

【Python数据库操作】使用SQLite和MySQL进行数据存储和查询!

【Python数据库操作】使用SQLite和MySQL进行数据存储和查询&#xff01; 在现代应用程序中&#xff0c;数据存储与管理是至关重要的。Python为开发者提供了多种与数据库进行交互的方式&#xff0c;其中SQLite和MySQL是最常用的两种数据库。本文将深入探讨如何使用Python进行SQ…

springboot jackson 数据脱敏

整体思路 对于一个class 包含多个字段&#xff0c;哪个字段是敏感字段&#xff0c;该字段是手机号 还是邮箱&#xff0c;希望如何进行脱敏&#xff0c;这些需要被定义&#xff0c;因此第一步定义《敏感注解》将注解放到指定得class的字段上&#xff0c;并且标记是邮箱 还是 手…

《Linux运维》之解决“Failed to start LSB: Bring up/down networking.“问题的方法

配置环境 使用镜像&#xff1a;CentOS-7-x86_64-Minimal-2009.iso 问题描述 当虚拟机需要配置多个网卡的时候&#xff0c;有时候如果更改完配置后&#xff0c;重启网络服务会发生失败的情况&#xff0c; 如以下情况 [rootlocalhost santi]# systemctl restart network Job …

No.20 笔记 | WEB安全 - 任意文件操作详解 part 2

一、文件后缀名验证 &#xff08;一&#xff09;验证方式分类 基于白名单验证&#xff1a;只允许上传白名单中指定后缀名的文件。基于黑名单验证&#xff1a;只允许上传黑名单中未包含后缀名的文件。 &#xff08;二&#xff09;实验准备 修改 Apache 的 httpd - conf 文件…

Shiro授权详解

在进行Shiro授权之前&#xff0c;了解相关术语对于理解整个过程至关重要。Shiro的授权机制以角色为中心&#xff0c;辅以权限&#xff0c;来控制主体对资源的访问。以下是常用术语的简要介绍&#xff1a; 授权 (Authorization) 授权是指确定主体是否有权访问某一资源或执行某一…

【Python小技巧】将df中字符串类型的数据转换为数值型,其它则保持不变

文章目录 一、目标二、实现代码 一、目标 将df中字符串类型的数据转换为数值型&#xff0c;其它则保持不变。 二、实现代码 import pandas as pddef convert_columns_to_numeric(df):for col in df.columns:try:df[col] pd.to_numeric(df[col])except ValueError:passretur…

uni-app写的微信小程序如何体积太大如何处理

方法一&#xff1a;对主包进行分包处理&#xff0c;将使用url: /pages/components/equipment/equipment跳转页面的全部拆分为分包&#xff0c;如url: /pagesS/components/equipment/equipment 在pages.json中添加 "subPackages": [{ "root"…

2024年五一杯数学建模C题煤矿深部开采冲击地压危险预测求解全过程论文及程序

2024年五一杯数学建模 C题 煤矿深部开采冲击地压危险预测 原题再现&#xff1a; “煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在…

transient关键字详解

今天没打算写blog&#xff0c;在看一篇关于多线程环境下SimpleDateFormat线程不安全的问题&#xff0c;一般我们都知道多线程下这个是不安全&#xff0c;但是为什么不安全不太清楚&#xff0c;我在看的这篇文章讲的比较透彻&#xff0c;我根据文章中讲结合SimpleDateFormat源码…