当前位置: 首页 > news >正文

VS+Qt配置QtXlsx库实现execl文件导入导出(全教程)

一、配置QtXlsx

1.1 下载解压QtXlsxWriter(在github下载即可)

网址:https://github.com/dbzhang800/QtXlsxWriter

1.2 使用qt运行

  1. 点击qtxlsx.pro运行QtXlsxWriter

  2. 选择DesktopQt51211MSVC201564bit编译器(选择自己本地电脑qt安装的编译器即可)

  3. 编译运行(debug或release都行)

1.3 移植

1、拷贝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\include\ 里的QtXlsx到C:\Qt\Qt5.12.11\5.12.11\msvc201564\include。

2、拷贝 D:\xlsxtool\QtXlsxWriter-master\QtXlsxWriter-master\src\xlsx的所有头文件到C:\Qt\Qt5.12.11\5.12.11\msvc201564\include\QtXlsx中。

3、拷贝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\lib 的Qt5Xlsx.lib,Qt5Xlsxd.lib,Qt5Xlsx.prl,Qt5Xlsxd.prl到C:\Qt\Qt5.12.11\5.12.11\msvc201564\lib。

4、拷贝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\mkspecs\modules中的qtlibxlsx.pri文件到C:\Qt\Qt5.12.11\5.12.11\msvc201564\mkspecs\modules中。

5、拷贝D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\lib 的Qt5Xlsx.dll,Qt5Xlsxd.dll到C:\Qt\Qt5.12.11\5.12.11\msvc201564\bin中

1.4 打开vs配置项目属性

如上配置完成后就能调用#include 了。

二、execl的导入导出

//导入动作槽函数
void SMachine::on_importAct_slot()
{
    QString filePath = QFileDialog::getOpenFileName(this, tr("打开文件"), m_programPath, "*.xlsx *.xls");
    if (!filePath.isEmpty()) {
        openProgramFile(filePath);  //调用实际执行导入操作的函数
    }
}

//导出动作作槽函数
void SMachine::on_exportAct_slot()
{
    if (m_tableWidget == nullptr) return;
    // 获取表格数据
    QList<QStringList> tableData;
    for (int row = 0; row < m_tableWidget->rowCount(); row++) {
        QStringList rowData;
        for (int column = 0; column < m_tableWidget->columnCount(); column++) {
            QTableWidgetItem* item = m_tableWidget->item(row, column);
            if (item != NULL) {
                rowData.append(item->text());
            }
            else {
                rowData.append("");
            }
        }
        tableData.append(rowData);
    }

    // 创建Excel文件
    QXlsx::Document xlsx;

    //1、遍历表头
    int columnCount = m_tableWidget->columnCount();
    for (int col = 0; col < columnCount; ++col)
    {
        QTableWidgetItem* headerItem = m_tableWidget->horizontalHeaderItem(col);
        if (headerItem)
        {
            QString text = headerItem->text();
            xlsx.write(1, col + 1, headerItem->text());
        }
        else
            xlsx.write(1, col + 1, "");
    }
    //2、遍历内容
    for (int row = 0; row < tableData.size(); row++)
    {
        for (int column = 0; column < tableData[row].size(); column++)
            xlsx.write(row + 2, column + 1, tableData[row][column]);
    }
    //3、另存为
    QString filePath = QFileDialog::getSaveFileName(this, tr("另存为"), m_programPath, "*.xlsx *.xls");
    if (filePath.isEmpty()) return;
    xlsx.saveAs(filePath);

    //4、顺便打开已导出(即已另存为)的文件
    openProgramFile(filePath);
}

//根据文件名执行导入excel文件操作的函数
void SMachine::openProgramFile(QString file)
{
    if (file.isEmpty()) return;
    QFileInfo fileInfo(file);
    m_programName = fileInfo.fileName();    //更新文件名

    if (m_tableWidget != nullptr)
    {
        m_tableWidget->clearContents();
        m_tableWidget->clear();
    }

    //初始化表
    if (m_tableWidget == nullptr)
    {
        m_tableWidget = new QTableWidget(this);
        //m_tableWidget->verticalHeader()->setHidden(true);   //隐藏垂直表头
         ui.tableLayout->addWidget(m_tableWidget);
         m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
         m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }

    //设置表头
    QTableWidgetItem* headerItem;
    QStringList headerText;
    headerText << tr("序号") << tr("X轴") << tr("Y轴") << tr("角度") << tr("站位") << tr("脚位") << tr("元件名称") << tr("元件类型") << tr("脚宽");
    m_tableWidget->setColumnCount(headerText.count());
    for (int i = 0; i < m_tableWidget->columnCount(); i++) {
        headerItem = new QTableWidgetItem(headerText.at(i));
        QFont font = headerItem->font();
        font.setPointSize(9);  //设置字体字号
        headerItem->setTextColor(Qt::blue); //设置颜色
        headerItem->setFont(font);
        m_tableWidget->setHorizontalHeaderItem(i, headerItem);
    }
    m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //设置列宽自适应

    //打开文件
    Document xlsx(file);
    QXlsx::Workbook* workBook = xlsx.workbook();
    QXlsx::Worksheet* workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));//第一个标签页
    QString value;
    int rows = workSheet->dimension().rowCount();
    int cols = workSheet->dimension().columnCount();

    for (int i = 2; i <= rows; i++)
    {
        int row = m_tableWidget->rowCount();
        m_tableWidget->insertRow(row);
        for (int j = 1; j <= cols; j++)
        {
            QXlsx::Cell* cell = workSheet->cellAt(i, j);
            if (cell != nullptr)
            {
                value = cell->value().toString();
                QTableWidgetItem* item = new QTableWidgetItem(value);
                m_tableWidget->setItem(i - 2, j - 1, item);
            }
        }
    }

    ui.tableLayout->addWidget(m_tableWidget);
    ui.programLE->setText(m_programName);
}

三、调用本地系统默认程序打开/修改execl文件

void SMachine::on_modifyAct_slot()
{
    QString filePath = QFileDialog::getOpenFileName(this, "选择 Excel 文件", m_programPath, "Excel 文件 (*.xlsx *.xls)");
    if (filePath.isEmpty()) {
        QMessageBox::warning(this, "警告", "未选择文件!");
        return;
    }

    //利用系统默认程序打开文件
    bool success = QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));

    if (!success) {
        QMessageBox::critical(this, "错误", "无法打开 Excel 文件!");
    }
}

http://www.dtcms.com/a/108395.html

相关文章:

  • 自动调整PPT文本框内容:防止溢出并智能截断文本
  • Shiro学习(三):shiro整合springboot
  • 城电科技 | 探秘零碳校园:创新应用,引领绿色未来
  • PHP在Debian环境上的并发处理能力如何
  • 深度学习处理文本(6)
  • STM32实现一个简单电灯
  • 2023年12月电子学会青少年软件编程四级考级真题—新“跳7”游戏
  • OpenCV
  • 系统与网络安全------Windows系统安全(5)
  • Maya软件中的约束基础:提高角色动画制作效率的关键技术
  • 【解决】Edge浏览器硬件加速问题:无法滚动与卡顿的应对方法
  • Lumerical ------ Edge coupler design
  • Test——BUG篇
  • 掌握 Git 的艺术:Rebase 和 Merge 的使用技巧
  • MySQL 中 LOCK TABLES(手动锁表) 语句的详细说明,包括语法、使用场景、示例代码及注意事项
  • c加加学习之day02
  • ubuntu制做vsftpd的docker镜像
  • git总是链接不成功
  • Excel处理控件Spire.XLS系列教程:C# 打印 Excel 文档
  • 【算法】双指针
  • GIT ---- 解决【fatal: Authentication failed for】
  • 【案例89】达梦数据库优化器参数导致的SQL执行错误
  • 在Ubuntu20.04开发Dify插件教程,部署Dify插件脚手架
  • 深度学习 Deep Learning 第15章 表示学习
  • 针对 MySQL 数据库的详细说明,分类列出临时资源(临时表、游标、未提交事务、会话变量、预编译语句)的创建、清理方式及未清理后果,并以表格总结
  • [CH32] RISC-V汇编指令解释
  • linux下springboot项目守护进程编写
  • arm64平台下linux访问寄存器
  • Python----机器学习(线性回归:前向传播和损失函数)
  • 【C++基础知识】 C 预处理器中的 #line 指令详解