Qt读写Excel--QXlsx合并单元格、文本对齐7 原创
Qt读写Excel–QXlsx合并单元格、文本对齐7🎧
| 更多精彩内容 |
|---|
| 👉个人内容分类汇总 👈 |
1、概述🎤
-
QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用;
-
使用方式
- QXlsx可以编译为动态库使用(使用动态库不用每次的编译,也可以让项目代码量更少,不用一打开工程就几十个文件);
- 直接将QXlsx.pri加入代码中使用(我比较推荐直接使用源码,因为QXlsx的注释信息基本在cpp文件中,可以通过阅读源码和注释来学习QXlsx的功能,当然,如果你已经熟悉了QXlsx的使用方式那编译成库使用会更方便,可以使工程的代码量变少);
-
本文中实现的功能:
- 通过【单元格引用】直接设置单元格合并;
- 通过【行列号】设置单元格合并;
- 在设置单元格合并时可以设置单元格【格式】,如文本居中对齐;
- 取消单元格合并;
- 在不修改其它内容情况下设置单元格水平对齐;
- 在不修改其它内容情况下设置单元格垂直对齐。
2、准备工作🪕
| 👉Qt读写Excel–QXlsx基本使用1👈 |
|---|
| 👉Qt读写Excel–QXlsx编译为静态库2👈 |
3、函数说明🎻
注意:执行了操作要保存才生效。⛔
-
bool Document::mergeCells(const CellRange &range, const Format &format) - 功能说明: 合并range范围的单元格,合并后用第一个单元格的数据填充,其它单元格的数据会被清除;可通过format设置单元格格式。
- 参数range: 需要合并的单元格范围;
- 参数format: 单元格的格式(如文本对齐、字体大小、颜色等);
- 返回值:true:合并单元格成功,false:合并单元格失败;
-
bool Document::unmergeCells(const CellRange &range) - 功能说明: 取消合并单元格;
- 参数range: 取消合并单元格的范围,必须与合并单元格时输入的【范围一致】,否则取消合并单元格失败;
- 返回值: true:取消合并单元格成功,false:取消合并单元格失败;
-
void Format::setHorizontalAlignment(HorizontalAlignment align) - 功能说明: 将水平对齐设置为给定的对齐;
- 参数align: 由
Format::HorizontalAlignment枚举指定水平对齐方式;
-
void Format::setVerticalAlignment(VerticalAlignment align) - 功能说明: 使用给定的对齐设置垂直对齐;
- 参数align: 由
Format::VerticalAlignment枚举指定垂直对齐方式;
4、示例代码🎹
4.1 .h文件📻
/******************************************************************************
* @文件名 test6.h
* @功能 1、通过【单元格引用】直接设置单元格合并;
* 2、通过【行列号】设置单元格合并;
* 3、在设置单元格合并时可以设置单元格【格式】,如文本居中对齐;
* 4、取消单元格合并;
* 5、在不修改其它内容情况下设置单元格水平对齐;
* 6、在不修改其它内容情况下设置单元格垂直对齐。
*
* @开发者 mhf
* @邮箱 1603291350@qq.com
* @时间 2022/07/09
* @备注
*****************************************************************************/
#ifndef TEST6_H
#define TEST6_H
#include <QWidget>
#include "Interface.h"
namespace Ui {
class Test6;
}
class Test6 : public InterFace
{
Q_OBJECT
public:
explicit Test6(QWidget *parent = nullptr);
~Test6();
QString getExcelName() override;
private slots:
void on_but_merge_clicked();
void on_but_unmerge_clicked();
void on_com_alignmentH_activated(int index);
void on_com_alignmentV_activated(int index);
private:
Ui::Test6 *ui;
};
#endif // TEST6_H
4.2 .cpp文件🎷
#include "test6.h"
#include "ui_test6.h"
#include <QDebug>
#include <qmessagebox.h>
#include <xlsxcell_p.h>
#include <xlsxdocument.h>
QXLSX_USE_NAMESPACE
#define EXCEL_NAME "test6.xlsx" // 本Demo使用的Excel文件名
Test6::Test6(QWidget *parent) :
InterFace(parent),
ui(new Ui::Test6)
{
ui->setupUi(this);
this->setWindowTitle("QXlsx合并单元格、文本对齐");
this->setToolTip(this->windowTitle());
}
Test6::~Test6()
{
delete ui;
}
QString Test6::getExcelName()
{
return EXCEL_NAME;
}
/**
* @brief 演示三种方式的单元格合并
* 1、通过【单元格引用】直接设置单元格合并;
* 2、通过【行列号】设置单元格合并;
* 3、在设置单元格合并时可以设置单元格【格式】,如文本居中对齐
*/
void Test6::on_but_merge_clicked()
{
Document xlsx;
// 在Excel中写入三组数据
xlsx.write("B3", "hello");
xlsx.write("C3", "123");
xlsx.write("B8", 123456);
xlsx.write("E8", "北风卷地白草折,胡天八月即飞雪");
xlsx.mergeCells("B3:F6"); // 可以通过【单元格引用】直接设置单元格合并(注意,有数据的单元格应该时第一个位置)
xlsx.mergeCells(CellRange(8, 2, 20, 3)); // 通过【行列号】设置单元格合并
Format format;
format.setHorizontalAlignment(Format::AlignHCenter); // 水平居中
format.setVerticalAlignment(Format::AlignVCenter); // 垂直居中
xlsx.mergeCells("E8:F20", format); // 在设置单元格合并时可以设置单元格【格式】,如文本居中对齐
if(xlsx.saveAs(EXCEL_NAME)) // 如果文件已经存在则覆盖
{
qInfo() << "Excel保存成功!";
// 保存成功后其它三种操作才可以用
ui->but_unmerge->setEnabled(true);
ui->com_alignmentH->setEnabled(true);
ui->com_alignmentV->setEnabled(true);
}
else
{
qWarning() << "Excel保存失败!";
}
}
/**
* @brief 取消合并单元格
*/
void Test6::on_but_unmerge_clicked()
{
Document xlsx(EXCEL_NAME);
if(!xlsx.load())
{
QMessageBox::warning(this, "错误", QString("打开%1失败,可能是文件不存在!").arg(EXCEL_NAME));
return;
}
xlsx.unmergeCells("B3:F6"); // 这里取消合并的范围【B3:F6】必须和之前合并单元格的【范围相同】,否则取消合并失败
if(xlsx.save())
{
qInfo() << "Excel保存成功!";
}
else
{
qWarning() << "Excel保存失败!";
}
}
/**
* @brief 在不修改其它内容情况下设置单元格水平对齐
* @param
*/
void Test6::on_com_alignmentH_activated(int index)
{
Document xlsx(EXCEL_NAME);
if(!xlsx.load())
{
QMessageBox::warning(this, "错误", QString("打开%1失败,可能是文件不存在!").arg(EXCEL_NAME));
return;
}
Format format = xlsx.cellAt(8, 2)->format(); // 获取单元格原有格式
format.setHorizontalAlignment(Format::HorizontalAlignment(index)); // 设置单元格水平对齐格式
xlsx.write(8, 2, xlsx.read(8, 2), format); // 将单元格原有内容、格式写入原来位置
if(xlsx.save())
{
qInfo() << "Excel保存成功!";
}
else
{
qWarning() << "Excel保存失败!";
}
}
/**
* @brief 在不修改其它内容情况下设置单元格垂直对齐
* @param index
*/
void Test6::on_com_alignmentV_activated(int index)
{
Document xlsx(EXCEL_NAME);
if(!xlsx.load())
{
QMessageBox::warning(this, "错误", QString("打开%1失败,可能是文件不存在!").arg(EXCEL_NAME));
return;
}
Format format = xlsx.cellAt(8, 2)->format(); // 获取单元格原有格式
format.setVerticalAlignment(Format::VerticalAlignment(index)); // 设置单元格垂直对齐格式
xlsx.write(8, 2, xlsx.read(8, 2), format); // 将单元格原有内容、格式写入原来位置
if(xlsx.save())
{
qInfo() << "Excel保存成功!";
}
else
{
qWarning() << "Excel保存失败!";
}
}
5、实现效果🎸


浙公网安备 33010602011771号