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

Qt的第三方库 QXlsx 最常用的使用方法

详细安装第三方库请看我上一个文章:

QT安装第三方库实现对 .xlsx 文件进行读写操作-CSDN博客

最重要的 4 个类

QXlsx::Document一个 Excel 文件(核心入口)
QXlsx::Worksheet一个 Sheet(表)
QXlsx::Cell一个单元格
QXlsx::Format单元格样式

最基础用法

1.打开 Excel 文件

#include "xlsxdocument.h" using namespace QXlsx; Document xlsx("test.xlsx"); if (!xlsx.load()) { qDebug() << "open xlsx failed"; return; }

2.读取单元格

//行列方式:行列都是 从 1 开始,不是 0 QVariant v = xlsx.read(1, 1); // A1 qDebug() << v.toString(); //Excel 坐标方式 QVariant v = xlsx.read("B2");

3.写单元格

xlsx.write(1, 1, "Hello"); xlsx.write("B2", 123); xlsx.save();

Sheet(工作表)操作

1.获取当前 Sheet

Worksheet *sheet = xlsx.currentWorksheet();

2.切换 Sheet

xlsx.selectSheet("Sheet2"); 或 xlsx.selectSheet(1); // 下标从 0

3.获取所有 Sheet 名称

QStringList sheets = xlsx.sheetNames();

4.新建 / 删除 Sheet

xlsx.addSheet("NewSheet"); xlsx.deleteSheet("Sheet1");

5.遍历 Excel

Worksheet *sheet = xlsx.currentWorksheet(); //获取当前表 CellRange range = sheet->dimension();//返回工作表的“有效范围” 拿到有效内容的行数列数 for (int row = 1; row <= range.rowCount(); ++row) { for (int col = 1; col <= range.columnCount(); ++col) { auto cell = sheet->cellAt(row, col); // shared_ptr<Cell> if (!cell) { qDebug() << row << col << "[空]"; continue; } QVariant v = cell->value(); // ① 日期时间(必须优先) if (cell->isDateTime()) { QDateTime dt = cell->dateTime().toDateTime(); qDebug() << row << col << "[DateTime]" << dt.toString("yyyy-MM-dd HH:mm:ss"); } // ② 字符串 else if (v.typeId() == QMetaType::QString) { qDebug() << row << col << "[String]" << v.toString(); } // ③ 数值 else if (v.typeId() == QMetaType::Double) { qDebug() << row << col << "[Number]" << v.toDouble(); } // ④ 布尔 else if (v.typeId() == QMetaType::Bool) { qDebug() << row << col << "[Bool]" << v.toBool(); } // ⑤ 其他 else { qDebug() << row << col << "[Other]" << v; } } }

6.单元格类型

if (!v.isValid() || v.isNull()) { // 空单元格 } switch (v.typeId()) { case QMetaType::QString: qDebug() << "字符串:" << v.toString(); break; case QMetaType::Double: qDebug() << "数值:" << v.toDouble(); break; case QMetaType::QDateTime: qDebug() << "日期:" << v.toDateTime(); break; case QMetaType::Bool: qDebug() << "布尔:" << v.toBool(); break; default: qDebug() << "未知类型"; }
http://www.rkmt.cn/news/187853.html

相关文章:

  • 【路径规划】基于RRT、RRT-star和RRT-u算法算法实现机器人路径规划附matlab代码
  • js 实现 css 的 color-mix 函数
  • Expression表达式树深度优化,彻底解决C#自定义集合性能瓶颈
  • 一种三合一的UWB蓝牙LORA定位工卡介绍
  • 实验4 guochenghua
  • Java毕设项目推荐-基于SpringBoot的云南旅游攻略信息系统的设计与实现基于springboot云南省旅游信息平台设计与实现【附源码+文档,调试定制服务】
  • 为什么你的C#项目还没用上运行时拦截?跨平台适配的关键一步
  • Java毕设项目推荐-基于SpringBoot智慧自习室管理系统的设计与实现基于SpringBoot的自习室预约管理系统的设计与实现【附源码+文档,调试定制服务】
  • C#跨平台性能监控工具开发全解析(从零构建高精度监控系统)
  • Java毕设选题推荐:基于SpringBoot+Vue的农夫码头蔬菜销售网站管理系统设基于SpringBoot的农夫码头蔬菜销售网站的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【GitHub项目推荐--AI-Codereview-Gitlab:智能代码审查工具】⭐⭐⭐⭐⭐
  • YOLOv8与OpenTelemetry集成统一观测性平台
  • 梯度下降如何把学习变成一件可执行的事
  • 【GitHub项目推荐--AIMedia:全自动AI媒体内容创作与发布平台】
  • 为什么顶尖团队都在用C# 12顶级语句做跨平台开发?真相曝光
  • YOLOv8在自动驾驶感知模块中的潜在应用价值
  • YOLOv8与Vault结合实现敏感配置安全管理
  • YOLOv8实时视频流检测:读取RTSP摄像头流数据
  • YOLOv8训练超参数调优指南:lr0、lrf、momentum设置
  • YOLOv8与YOLO-NAS对比:谁是当前最强目标检测器?
  • YOLOv8在智慧农业中的病虫害识别应用实例
  • YOLOv8与Kafka消息队列解耦前后端处理逻辑
  • 稚晖君发布首款个人机器人启元Q1,全球最小全身力控人形机器人
  • YOLOv8在森林防火监控系统中的烟火识别能力
  • YOLOv8与Tempo链路追踪系统集成定位瓶颈
  • 【提示词工程】01-大模型应用开发概述:定义大模型应用开发的基本概念和范畴
  • YOLOv8与Envoy代理集成实现流量镜像测试
  • YOLOv8最新动态:Ultralytics团队发布v8.1更新日志
  • 使用Markdown记录YOLOv8实验过程的最佳实践
  • Vivado Synthesis Strategy(综合策略)选择指南