1. QXlsxWriter 是什么?
QXlsx 是一个基于 Qt 的开源 C++ 库,用来读写 Microsoft Excel 2007 及以上(.xlsx 格式) 文件。
它的特点:
纯 C++ 实现,不依赖 Excel 或者 OLE/COM(不像 QAxObject 那样只能在 Windows 上用)。
跨平台(Windows、Linux、macOS 都能用)。
Qt 风格 API,比如
Document.write(row, col, value)
,用起来和操作QTableWidget
类似。支持:单元格文本、数值、日期、格式、图表、图片、公式等。
2. 常用方法
QXlsx::Document
是最常用的类:
方法 | 作用 |
---|---|
write(row, col, QVariant value) |
向单元格写数据 |
write("A1", value) |
用 Excel 坐标写数据 |
read(row, col) |
读取单元格内容 |
read("B2") |
用 Excel 坐标读取 |
save() |
保存到默认文件名 |
saveAs("xxx.xlsx") |
另存为 |
load("xxx.xlsx") |
打开一个 Excel 文件 |
3. QtCreator Demo 工程
下面是一个最小 Demo,包含 写 Excel 和 读 Excel 两个按钮。
📌 工程目录
QXlsxDemo/
├── QXlsx/ # QXlsx 源码(从 GitHub 下载)
│ ├── xlsxdocument.cpp
│ ├── xlsxdocument.h
│ ├── ...
│ └── QXlsx.pri
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
└── QXlsxDemo.pro
📌 .pro
文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QXlsxDemo
TEMPLATE = app
# 包含 QXlsx
include(QXlsx/QXlsx.pri)
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
📌 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btnWrite_clicked();
void on_btnRead_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
📌 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include "QXlsx/xlsxdocument.h"
using namespace QXlsx;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btnWrite_clicked()
{
Document xlsx;
xlsx.write("A1", "姓名");
xlsx.write("B1", "年龄");
xlsx.write("C1", "城市");
xlsx.write("A2", "张三");
xlsx.write("B2", 25);
xlsx.write("C2", "北京");
xlsx.write("A3", "李四");
xlsx.write("B3", 30);
xlsx.write("C3", "上海");
if (xlsx.saveAs("demo.xlsx")) {
QMessageBox::information(this, "成功", "Excel 文件已保存:demo.xlsx");
} else {
QMessageBox::warning(this, "失败", "保存失败");
}
}
void MainWindow::on_btnRead_clicked()
{
Document xlsx("demo.xlsx");
QString name = xlsx.read("A2").toString();
int age = xlsx.read("B2").toInt();
QString city = xlsx.read("C2").toString();
QMessageBox::information(this, "读取结果",
QString("姓名:%1\n年龄:%2\n城市:%3")
.arg(name).arg(age).arg(city));
}
📌 mainwindow.ui
用 Qt Designer 拖两个按钮:
btnWrite
(写 Excel)btnRead
(读 Excel)
📌 main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
✅ 运行效果:
点击 写 Excel → 生成
demo.xlsx
文件。点击 读 Excel → 弹窗显示
demo.xlsx
里第二行的内容。