1.QXlsx 环境配置参考以下网站
https://www.freesion.com/article/9642918260/
注意:编译时注意,这是个库,只需要构建通过就行。另外构建和自己项目所使用构建器必须是一样的才行。
2.代码实现
#include "xlsxdocument.h"
#include "xlsxconditionalformatting.h"
#include <QtXlsx>
using namespace QXlsx;
//QTXLSX_USE_NAMESPACE
//写数据到表格中
void writeQXlsx(const QString& filePath, QList<QList<QVariant>> dataList)
{
/// 创建对象
QXlsx::Document xlsx;
/// 添加到excel表的对象中
/// 注意这里是[1, n]
for (int row = 0; row < dataList.size(); row += 1) {
for (int col = 0; col < dataList.at(0).size(); col += 1) {
xlsx.write(row + 1, col + 1, dataList.at(row).at(col));
}
}
/// 修改表格名
xlsx.renameSheet("Sheet1", "Sheet1");
/// 设置单元格样式
Format format;
format.setHorizontalAlignment(Format::AlignHCenter);//水平居中
format.setVerticalAlignment(Format::AlignVCenter);//垂直居中
format.setFontBold(true);//字体加粗
format.setFontColor(QColor(Qt::magenta));
/// 合并单元格
//xlsx.mergeCells("A1:I1", format);
/// 保存
/// 若原来有同名文件,则会覆盖
xlsx.saveAs(filePath);
}
/**
* @brief readFromQXlsx
* @param filePath
* @return
* 读取文件
*/
QList<QList<QVariant>> readFromQXlsx(const QString& filePath) {
/// 根据路径获取xlsx文件对象
QXlsx::Document xlsx(filePath);
QXlsx::CellRange range = xlsx.dimension();
QList<QList<QVariant>> allData;
QList<QVariant> rowData;
/// xlsx表中行列的范围
/// 若不存在则是-1和-2
if (range.firstRow() < 0 || range.lastRow() < 0 ||
range.firstColumn() < 0 || range.lastColumn() < 0) {
qDebug() << filePath << " 不存在";
qDebug() << range.firstRow();
qDebug() << range.lastRow();
qDebug() << range.firstColumn();
qDebug() << range.lastColumn();
return allData;
}
/*qDebug() << xlsx.read("A1");
qDebug() << xlsx.sheetNames();*/
/// 范围[1, n]
for (int row = range.firstRow(); row <= range.lastRow(); row += 1) {
for (int col = range.firstColumn(); col <= range.lastColumn(); col += 1) {
//qDebug() << xlsx.read(row, col).toString();
rowData.append(xlsx.read(row, col).toString());
}
allData.append(rowData);
rowData.clear();
}
return allData;
}