以下是一个使用 QXlsx 将数据保存到 .xlsx
文件的完整示例代码,包含基础数据写入、格式设置和常见操作:
示例代码:写入数据到 Excel 文件
#include <QCoreApplication>
#include <QXlsx/xlsxdocument.h>
#include <QDebug>
int main() {
// 创建一个 Excel 文档对象
QXlsx::Document xlsx;
// 写入基础数据(文本、数字、日期)
xlsx.write("A1", "姓名"); // 使用单元格标识符(如"A1")
xlsx.write("B1", "年龄");
xlsx.write("C1", "入职日期");
xlsx.write(2, 1, "张三"); // 使用行列号(行号, 列号): 行2,列1 = A2
xlsx.write(2, 2, 28);
xlsx.write(2, 3, QDate(2020, 5, 10)); // 日期自动转换为 Excel 格式
xlsx.write(3, 1, "李四");
xlsx.write(3, 2, 35);
xlsx.write(3, 3, QDate(2018, 9, 1));
// 设置标题行格式(加粗、居中、背景色)
QXlsx::Format headerFormat;
headerFormat.setFontBold(true);
headerFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter);
headerFormat.setPatternBackgroundColor(Qt::yellow);
xlsx.write("A1:C1", headerFormat); // 应用格式到区域
// 合并单元格(合并 A5:C5 并写入数据)
xlsx.mergeCells("A5:C5");
xlsx.write("A5", "员工信息汇总表", headerFormat);
// 添加公式(计算平均年龄)
xlsx.write("A6", "平均年龄");
xlsx.write("B6", "=AVERAGE(B2:B3)"); // Excel 公式
// 插入图片(需图片路径正确)
// xlsx.insertImage("D2", QImage("avatar.png"));
// 保存文件到当前目录
if (xlsx.saveAs("EmployeeData.xlsx")) {
qDebug() << "Excel 文件保存成功!路径: " << QDir::current().filePath("EmployeeData.xlsx");
} else {
qDebug() << "保存失败!请检查路径或权限。";
}
return 0;
}
代码说明
-
写入数据:
- 支持直接通过单元格标识符(如
"A1"
)或行列号(如行号, 列号
)写入数据。 - 自动处理数据类型(文本、数字、日期等)。
- 支持直接通过单元格标识符(如
-
格式设置:
- 使用
QXlsx::Format
对象定义格式(加粗、对齐、背景色等)。 - 通过
write
方法的第三个参数应用格式。
- 使用
-
合并单元格:
- 使用
mergeCells()
合并指定区域的单元格。
- 使用
-
公式支持:
- 直接写入 Excel 公式(如
=AVERAGE(B2:B3)
),打开文件时会自动计算结果。
- 直接写入 Excel 公式(如
-
保存文件:
saveAs()
方法指定文件名,返回bool
表示是否成功。
输出结果
生成的 EmployeeData.xlsx
文件内容如下:
姓名 | 年龄 | 入职日期 |
---|---|---|
张三 | 28 | 2020-05-10 |
李四 | 35 | 2018-09-01 |
员工信息汇总表(合并 A5-C5) | ||
平均年龄 | =AVERAGE(B2:B3) → 31.5 |
常见问题处理
- 文件路径权限问题:确保程序对目标目录有写入权限。
- 日期显示异常:QXlsx 会自动转换
QDate
/QDateTime
为 Excel 日期格式。 - 公式不生效:需用 Excel 软件打开文件查看计算结果,文本编辑器不会计算公式。
如果需要更多高级操作(如图表、条件格式等),可参考 QXlsx 官方文档。