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      "

这看起来就正常了。

相关推荐
xxie1237941 天前
return与print
开发语言·python
秋91 天前
从 Python 后端工程师转型 AI Engineer(AI 工程化)的完整补课清单(2026实战版)
开发语言·人工智能·python
程序员二叉1 天前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
慕木沐1 天前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
Roann_seo%1 天前
C++文件操作完全指南:从文本读写到二进制文件处理
开发语言·c++
huangdong_1 天前
淘宝商品SKU图自动分类技术深度解析:从DOM解析到智能归档
开发语言·javascript·ecmascript
阿正的梦工坊1 天前
【Rust】12-借用检查器与非词法生命周期
开发语言·后端·rust
qq_2518364571 天前
基于java Web网络订餐系统设计与实现 源码文档
java·开发语言·前端
秋91 天前
3年经验Python后端转AI Engineer:3个月实战转型计划(2026版)
开发语言·人工智能·python
凡人叶枫1 天前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法