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      "

这看起来就正常了。

相关推荐
014-code5 小时前
订单超时取消与库存回滚的完整实现(延迟任务 + 状态机)
java·开发语言
妙为5 小时前
银河麒麟V4下编译Qt5.12.12源码
c++·qt·国产化·osg3.6.5·osgearth3.2·银河麒麟v4
lly2024066 小时前
组合模式(Composite Pattern)
开发语言
游乐码6 小时前
c#泛型约束
开发语言·c#
Dontla6 小时前
go语言Windows安装教程(安装go安装Golang安装)(GOPATH、Go Modules)
开发语言·windows·golang
chushiyunen6 小时前
python rest请求、requests
开发语言·python
铁东博客6 小时前
Go实现周易大衍筮法三变取爻
开发语言·后端·golang
baidu_huihui6 小时前
在 CentOS 9 上安装 pip(Python 的包管理工具)
开发语言·python·pip
南 阳6 小时前
Python从入门到精通day63
开发语言·python
lbb 小魔仙6 小时前
Python_RAG知识库问答系统实战指南
开发语言·python