Qt通过QXlsxWriter读写Excel的详细Demo

发布于:2025-09-13 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. QXlsxWriter 是什么?

QXlsx 是一个基于 Qt 的开源 C++ 库,用来读写 Microsoft Excel 2007 及以上(.xlsx 格式) 文件。

它的特点:


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 里第二行的内容。


网站公告

今日签到

点亮在社区的每一天
去签到