QT使用QtXlsxWriter读取excel文件

QtXlsxWriter是一个用于操作Excel文件的Qt库,支持读写.xlsx格式的文件。

源码引用

在.pro文件中添加:

makefile

复制

makefile 复制代码
include(path/to/QtXlsxWriter/src/xlsx.pri)
 

测试代码

cpp 复制代码
void readExcel(const QString &fileName)
{
   QXlsx::Document xlsx(fileName);

   if (xlsx.sheetNames().isEmpty())// 空文件或打不开
   {
       qDebug() << "open failed or file empty";
       return;
   }

   // 读单个单元格
   QVariant v = xlsx.read("A1");
   qDebug() << "A1 =" << v;

   // 遍历整张表
   for (int row = 2; row <= xlsx.dimension().lastRow(); ++row) {

       qDebug() << QString("%1.%2  %3  %4  %5  %6  ").arg(row).arg(xlsx.read(row, 1).toString()) \
                   .arg(xlsx.read(row, 2).toString()).arg(xlsx.read(row, 3).toString())
                   .arg(xlsx.read(row, 4).toString()).arg(xlsx.read(row, 5).toString());
   }
}

运行发现读取的时候有点问题,会直接把表格里的公式给读出来:

excel内容:

程序读取日志:

sh 复制代码
A1 = QVariant(QString, "序号")
"2.=ROW()-1  0  2      "
"3.=ROW()-1  =B2+2  2      "
"4.=ROW()-1  =B3+2  2      "
"5.=ROW()-1  =B4+2  2      "
"6.=ROW()-1  12  2      "
"7.=ROW()-1  =B6+2  2      "
"8.=ROW()-1  =B7+2  2      "
"9.=ROW()-1  =B8+2  2      "
"10.=ROW()-1  =B9+2  2      "
"11.=ROW()-1  =B10+2  2      "
"12.=ROW()-1  =B11+2  2      "
"13.=ROW()-1  =B12+2  2      "
"14.=ROW()-1  =B13+2  2      "
"15.=ROW()-1  32  2      "
"16.=ROW()-1  =B15+2  2      "
"17.=ROW()-1  =B16+2  2      "
"18.=ROW()-1  =B17+2  2      "
"19.=ROW()-1  =B18+2  2      "
"20.=ROW()-1  =B19+2  2      "

我们需要读取到表格显示值,不用背后的公式,具体修改的代码如下:

如上图中部分代码,就是判断单元表格里如果有公式,则返回公式,这里可以将这部分代码注释掉,直接返回单元格内容,修改后运行结果如下:

sh 复制代码
A1 = QVariant(QString, "序号")
"2.1  0  2      "
"3.2  2  2      "
"4.3  4  2      "
"5.4  6  2      "
"6.5  12  2      "
"7.6  14  2      "
"8.7  16  2      "
"9.8  18  2      "
"10.9  20  2      "
"11.10  22  2      "
"12.11  24  2      "
"13.12  26  2      "
"14.13  28  2      "
"15.14  32  2      "
"16.15  34  2      "
"17.16  36  2      "
"18.17  38  2      "
"19.18  40  2      "
"20.19  42  2      "

这看起来就正常了。

相关推荐
格林威6 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
djjjx.6 小时前
【 C++ 】多态
开发语言·c++·多态
夜雪一千6 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑6 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0016 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
光影少年6 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
SomeB1oody6 小时前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
AI导出鸭6 小时前
怎么让豆包做表格?AI导出鸭苹果版将豆包输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
言乐69 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
WWJA王文举16 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言