Qt怎么将表格数据导出为Excel文件

风萱姑娘_9928

风萱姑娘_9928

2026-10-23

339人浏览

原创

qt无法原生导出excel,qtablewidget无savetoexcel方法;误用qtextstream写.xlsx会导致乱码,因.xlsx是zip+xml结构;推荐qxlsx库(免依赖、纯c++)或csv方案(需处理特殊字符及bom)。

qt怎么将表格数据导出为excel文件

Qt 用 QTableWidget 导出 Excel 的常见误区

Qt 本身不提供原生 Excel 写入能力,QTableWidget 也没有 saveToExcel() 这类方法。很多人试图用 QTextStream 直接写 .xlsx 文件,结果打开是乱码或报错 —— 因为 Excel(.xlsx)是 ZIP + XML 结构,不是纯文本格式。

推荐方案:用 QXlsx 库写入 .xlsx 文件

QXlsx 是 Qt 生态中最成熟、免依赖、头文件即用的 Excel 操作库(MIT 协议)。它不调用系统 Excel,也不依赖 COM 或 LibreOffice,纯 C++ 实现。

实操建议:

  • 下载 QXlsx 源码(GitHub 搜索 QtXlsxWriter),把 xlsxdocument.h 和 xlsxdocument.cpp 加入项目
  • 在 .pro 文件中添加:QT += core gui widgets(无需额外模块)
  • 导出逻辑示例(从 QTableWidget 到 .xlsx):
#include "xlsxdocument.h"
// ...
void exportToExcel(QTableWidget *table, const QString &filePath) {
    QXlsx::Document xlsx;
    int row = 1;
    for (int r = 0; r rowCount(); ++r) {
        int col = 1;
        for (int c = 0; c columnCount(); ++c) {
            QTableWidgetItem *item = table->item(r, c);
            QString text = item ? item->text() : "";
            xlsx.write(row, col, text);
            ++col;
        }
        ++row;
    }
    xlsx.saveAs(filePath);
}

注意:QXlsx 行列索引从 1 开始,不是 0;空单元格会自动跳过,无需手动判断 nullptr。

导出 CSV 作为轻量替代方案

如果只要兼容性好、能被 Excel 打开的表格,CSV 更简单可靠,且无第三方库依赖。

Excel XLSX Formula Cleanup
Excel XLSX Formula Cleanup

诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿

下载

容易踩的坑:

  • 字段含逗号、换行或双引号时,必须用双引号包裹,并对内部双引号转义(" → "")
  • Windows 上建议用 QTextStream 并显式设置编码为 UTF-8 with BOM,否则 Excel 可能乱码
  • 不要用 QString::split(',') 解析原始 CSV —— 它无法处理带逗号的字段

导出示例关键片段:

QFile file(filePath);
if (file.open(QIODevice::WriteOnly)) {
    QTextStream out(&file);
    out.setCodec("UTF-8");
    // 写 BOM
    out rowCount(); ++r) {
        QStringList rowItems;
        for (int c = 0; c columnCount(); ++c) {
            QString s = table->item(r, c) ? table->item(r, c)->text() : "";
            if (s.contains(',') || s.contains('\n') || s.contains('"')) {
                s.replace('"', "\"\"");
                s = '"' + s + '"';
            }
            rowItems 

<h3>QTableView + QSqlQueryModel 导出要注意什么</h3>
<p>如果你用的是 <code>QTableView</code> 配合 <code>QSqlQueryModel</code>,不能直接遍历视图的 visual index —— 它可能启用了排序/过滤,行列顺序和底层数据不一致。</p>
<p>正确做法是绕过视图,从模型源头取数据:</p>
  • 用 model->record(row) 获取整行 QSqlRecord,再逐字段调用 value(c).toString()
  • 避免调用 model->data(model->index(r,c), Qt::DisplayRole),因为某些自定义委托可能返回非原始值
  • 如果模型有隐藏列,需提前用 model->headerData(c, Qt::Horizontal, Qt::UserRole) 等方式判断是否导出

复杂点在于:QXlsx 对中文支持良好,但 CSV 在 Windows Excel 中默认用 ANSI 打开,BOM 是刚需;而 macOS / Linux 下多数电子表格软件反而会把 BOM 当作脏字符。实际交付前务必在目标环境验证打开效果。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++ c++qt c++桌面开发 excel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

2023.07.25

5421

7

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3376

5

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

2023.08.02

3160

3

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

2023.08.02

1444

3

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

2023.08.02

717

5

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

2023.08.09

5148

7

java导出excel
java导出excel

在Java中,我们可以使用Apache POI库来导出Excel文件。本专题提供java导出excel的相关文章,大家可以免费体验。

2023.08.18

7103

6

excel输入值非法
excel输入值非法

在Excel中,当输入的数值非法时,有以下多种处理方法。本专题为大家提供excel输入值非法的相关文章,大家可以免费体验。

2023.08.18

1741

3

excel生成二维码
excel生成二维码

虽然Excel本身并不直接支持生成二维码,但我们可以借助一些插件或宏来实现在Excel中生成二维码的功能。本专题为大家提供excel生成二维码的相关文章。

2023.08.18

3038

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习