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 "
这看起来就正常了。