Qt使用QXlsx库

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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值