Qt导出数据到EXCEL的两种方式 (*****)

2023-11-18

目录

Qt如何将数据保存成CSV文件(*****)

Qt Tablewidget表格数据的导出和导入

Qt导出数据到EXCEL的两种方式

QT将QTableWidget数据保存至Excel

Qt Tablewidget表格数据导出到 .csv文件 (*****)(测试 OK)

-------------------------------------------

直接保存为  csv文件,可在 excel中打开,简单方便。

=========================

Qt Tablewidget表格数据的导出和导入 (*****)

https://blog.csdn.net/Fdog_/article/details/113740960

前期准备:

pro文件加入
QT += axcontainer

在头文件加入#include<ActiveQt/QAxObject>

网上还有写#include

版本不同,可能代码写法不同,自己测试。

一. xls/xlsx文件数据导入TableWidget表格

我们右击导入按钮,转到槽,添加被点击后的代码

QString strData;
void MainWindow::on_pushButton_17_clicked()
{
	//首先我们需要创建一个文件选择对话框
    QString curPash =QDir::currentPath(); //获取当前路径
    QString dlgTitle="选择表格文件";
    //xls和xlsx格式的文件都可以,xlsx兼容xls,注意每一种类型后面要加两个分号
    QString filter="表格文件(*.xls *.xlsx);;xls文件(*.xls);;xlsx文件(*.xlsx);;所有文件(*.*)";
    //创建文件选择对话框
    QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPash,filter);
    if(fileList.count()<1)
        return;
    for(int i = 0;i<fileList.count();i++)
    {
    	//保存文件地址
        strData = fileList.at(i);
    }
    //连接Excel控件
    QAxObject excel("Excel.Application");
    //不显示任何警告信息
    excel.setProperty("Visible",false);
    //获取工作簿集合
    QAxObject *workbooks = excel.querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)",str);
    //获取活动工作簿
    QAxObject *workbook = excel.querySubObject("ActiveWorkBook");
    //获取工作表集合的工作表1,即sheet1
    QAxObject *worksheet = workbook->querySubObject("Sheets(int)",1);
    QAxObject *range; //获取cell的值
    QString strVal="hull";
    QStringList header;
    //设置初始表格行列都为0
    ui->tableWidget->setRowCount(0); //设置行数为0
    ui->tableWidget->setColumnCount(0); //设置列数为0

    int count =0;
    for(int i = 1;i<row;i++)
    {
    	//注意setRowCount里面的函数不是追加,而是总数,很多人最开始都把这个函数以为是总数,造成程序经常崩溃
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
        for(int j = 1;j<column;j++)
        {
            if(i == 1)
            {
                ui->tableWidget->setColumnCount(ui->tableWidget->columnCount()+1);
                range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                strVal = range->dynamicCall("Value2()").toString();
                header<<strVal;
                //设置表格头
            }
            else
            {
                probar->setValue(++count);
                range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                strVal = range->dynamicCall("Value2()").toString();
                ui->tableWidget->setItem(i-2,j-1,new QTableWidgetItem(strVal));
            }
        }
        if(i == 1)
        {
            ui->tableWidget->setHorizontalHeaderLabels(header);
        }
    }
    ui->tableWidget->setRowCount(ui->tableWidget->rowCount()-1);
    }
}

二. tableWidget表格数据导出为xls/xlsx文件

我们右击导入按钮,转到槽,添加被点击后的代码

void MainWindow::on_pushButton_23_clicked()
{
    //获取保存路径
       QString filepath=QFileDialog::getSaveFileName(this,tr("Save"),".",tr(" (*.xlsx)"));
       if(!filepath.isEmpty()){
           QAxObject *excel = new QAxObject(this);
           //连接Excel控件
           excel->setControl("Excel.Application");
           //不显示窗体
           excel->dynamicCall("SetVisible (bool Visible)","false");
           //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
           excel->setProperty("DisplayAlerts", false);
           //获取工作簿集合
           QAxObject *workbooks = excel->querySubObject("WorkBooks");
           //新建一个工作簿
           workbooks->dynamicCall("Add");
           //获取当前工作簿
           QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
           //获取工作表集合
           QAxObject *worksheets = workbook->querySubObject("Sheets");
           //获取工作表集合的工作表1,即sheet1
           QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);
           //设置表头值
           for(int i=1;i<ui->tableWidget->columnCount()+1;i++)
           {
               //设置设置某行某列
               QAxObject *Range = worksheet->querySubObject("Cells(int,int)", 1, i);
               Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->horizontalHeaderItem(i-1)->text());
           }
           //设置表格数据
           for(int i = 1;i<ui->tableWidget->rowCount()+1;i++)
           {
               for(int j = 1;j<ui->tableWidget->columnCount()+1;j++)
               {
                   QAxObject *Range = worksheet->querySubObject("Cells(int,int)", i+1, j);
                   Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->item(i-1,j-1)->data(Qt::DisplayRole).toString());
               }
           }
           workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath
           workbook->dynamicCall("Close()");//关闭工作簿
           excel->dynamicCall("Quit()");//关闭excel
           delete excel;
           excel=NULL;
           qDebug() << "\n导出成功啦!!!";
       }
}

Qt如何将数据保存成CSV文件

一、csv文件

csv文件是逗号分隔值(Comma-Separated Values,CSV)文件的缩写,其文件以纯文本形式存储表格数据(数字和文本),各个字段用逗号进行分割,采用回车进行换行。由于采用纯文本记录,csv文件可以很方便的被文本处理工具、excel等工具识别。
二、Qt中导出csv文件

在Qt中打开与保存csv文件十分方便,直接按照普通文本的形式操作,用QTextStream进行标准化的读写,还是很简单。

具体例如:(测试 OK)

#include <QFileDialog>
#include <QDateTime>
#include <QTextStream>

        

void MainWindow::on_pushButton_clicked()
{
    //1.选择导出的csv文件保存路径
    QString csvFile = QFileDialog::getExistingDirectory(this);
    if(csvFile.isEmpty())
        return;
    
    //2.文件名采用系统时间戳生成唯一的文件
    QDateTime current_date_time =QDateTime::currentDateTime();
    QString current_date =current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
    //csvFile += tr("/%1_DTUConfigInfo_export_%2.csv").arg(username).arg(current_date);
    csvFile += tr("/DTUConfigInfo_export_%2.csv").arg(current_date);
    
    
    //3.用QFile打开.csv文件 如果不存在则会自动新建一个新的文件
    QFile file(csvFile);
    if ( file.exists())
    {
        //如果文件存在执行的操作,此处为空,因为文件不可能存在
    }
    file.open( QIODevice::ReadWrite | QIODevice::Text );
    statusBar()->showMessage(tr("正在导出数据。。。。。。"));
    QTextStream out(&file);
    
    //4.获取数据 创建第一行
    out<<tr("UID,")<<tr("sysID,")<<tr("UsrID,")<<tr("MeterNum,")<<tr("CMD,\n");//表头
    //其他数据可按照这种方式进行添加即可
    
    //5.写完数据需要关闭文件
    file.close();   
}

————————————————
版权声明:本文为CSDN博主「jianwang16」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010058695/article/details/100155906

Qt导出数据到EXCEL的两种方式

https://blog.csdn.net/hmwz0001/article/details/119318881

QT将QTableWidget数据保存至Excel

https://blog.csdn.net/weixin_46146288/article/details/107879538

Qt Tablewidget表格数据导出到 .csv文件 :(测试 OK)

#include <QFileDialog>
#include <QTextStream>
#include <iostream>

//显示所选表所有内容
void MainWindow::on_pushButton_clicked()
{
    /
     初始化:最好放在 构造函数中执行?
    for(int row = 0; row < 4; row++)
    {
        for(int col = 0; col < 3; col++)
        {
            if(ui->tableWidget->item(row,col)==nullptr || ui->tableWidget->item(row,col)->text().isEmpty())
            {
                ui->tableWidget->setItem(row,col,new QTableWidgetItem);
                //...
            }
        }
    }
/
     方法1:获取创建的csv文件名
    QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                    tr("Files (*.csv)"));
    if (fileName.isEmpty())
        return;

    //打开.csv文件
    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        std::cerr << "Cannot open file for writing: "
                  << qPrintable(file.errorString()) << std::endl;
        return;
    }
    QTextStream out(&file);

/
//     方法2: 打开指定的 .csv文件
//    QFile file("200000.csv");
//    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
//    {
//        qDebug()<<"Cannot open file for writing";
//        return;
//    }
//    QTextStream out(&file);

     创建表头
    out << tr("信息,") << tr("数字,") <<"\n";

    QString string;
    //写入内容
    for(int i = 0; i < 4; i++)
    {
        //             QString string = ui->tableWidget->item(i, col)->text();
        //             out << "test" << "," << i << "\n";

        for(int col = 0; col < 3; col++)

        {
            string ="";
            string = ui->tableWidget->item(i, col)->text();
             下面语句,可以直接访问,不需要执行ui->tableWidget->setItem(row,col,new QTableWidgetItem);
            /// 但还不知道是否有其他的副作用。
            //string = ui->tableWidget->model()->index(i, col).data().toString();

            out << string << ","; // 写入文件
            //out << "\n";
        }
        out << "\n";
    }
    //关闭文件
    file.close();
}

CSV(逗号分隔值文件格式)_百度百科

Qt中csv文件的导入与导出

CSV

1.简介:

  全称:Comma Separated Values。

  是“逗号分隔值”的英文缩写,通常是纯文本文件,一般用wordWPS或是记事本打开。

2.规则:

(1)开头不留空,以行为单位。

(2)可含或不含列名,含列名则居文件第一行。

(3)一行数据部跨行,无空行。

(4)以半角逗号作分隔符,列为空也要表达其存在。

(5)列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。

(6)列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。

(7)文件读写时引号,逗号操作规则互逆。

(8)内码格式不限,可为 ASCII、Unicode 或者其他。

(9)不支持特殊字符
————————————————
版权声明:本文为CSDN博主「岁小草」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mingxia_sui/article/details/7683030

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt导出数据到EXCEL的两种方式 (*****) 的相关文章

  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 如何从程序内部获取指向程序的特定可执行文件部分的指针? (也许是诽谤)

    我在 Linux 环境中 需要编写一个程序来检索放置在其可执行文件的某个部分中的一些数据 那么 如何从程序内部获取指向程序某个部分 通过其名称 的指针呢 我知道可以使用elf getdata 将节的索引作为参数传递给 get 和Elf Da
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 在 Windows 上静默安装 Qt55 Enterprise

    编辑 在 Qt 支持的帮助下 我已经解决了如何自动化 Qt 企业安装程序的这两个部分 下面是脚本调用 我正在尝试在 Windows 8 1 和 Windows 10 上静默安装 Qt 5 5 1 Enterprise 使用 script 开
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉

随机推荐

  • 神经网络与深度学习笔记——代价函数,规范化,过拟合

    神经网络与深度学习笔记系列一共有五个专题 分别是第一章使用神经网络识别手写数字 梯度下降算法是什么 主要介绍了神经网络的基础例如感知器激活函数等概念 最主要介绍了梯度下降算法 第二章反向传播算法如何工作 反向传播算法原理 主要介绍了反向传播
  • 数据结构--二叉树-堆(1)

    文章目录 树 概念 相关的基本概念 树的表示 二叉树 概念 特殊二叉树 性质 堆 二叉树的顺序结构 堆的概念 堆的实现 初始化 数组初始化为堆 向上调整 向下调整 插入 删除 打印 摧毁 判空 获取堆顶数据 验证 堆的应用 堆排序 TopK
  • 磁盘测试工具FIO

    磁盘测试工具FIO https www cnblogs com klb561 p 11939355 html 目前主流的第三方IO测试工具有fio iometer和Orion 这三种工具各有千秋 fio在Linux系统下使用比较方便 iom
  • 淘宝官方订单API接口,获取售出的商品订单列表(爬虫数据)

    淘宝 天猫获取售出的商品订单列表 API 返回值说明 seller order list 获取售出的商品订单列表 公共参数 名称 类型 必须 描述 key String 是 调用key 必须以GET方式拼接在URL中 获取Key和secre
  • 大学英语六级历年真题Word,PDF,和音频 下载

    1 链接 https pan baidu com s 11w bAM1JoHTt HjNfor70g 提取码 ro6w 复制这段内容后打开百度网盘手机App 操作更方便哦 1 1 1 1 1 下载方式 扫码联系获取 1学习人工智能可以扫码关
  • C++函数指针定义及用法

    什么是函数指针 如果在程序中定义了一个函数 那么在编译时系统就会为这个函数代码分配一段存储空间 这段存储空间的首地址称为这个函数的地址 而且函数名表示的就是这个地址 既然是地址我们就可以定义一个指针变量来存放 这个指针变量就叫作函数指针变量
  • Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】

    找到两篇文章 是比较流行的方法 接下来记录一下收获 第一篇文章 变速齿轮 研究手记 转自 http www newasp net tech 58262 html 注意 如果你看了本文 对我们这个软件有兴趣 请到我们的主页www vrbrot
  • 幂等性常用的解决方案

    幂等性常用的解决方案 在进行讲解方案之前 我想先说一下什么是幂等性 下面是我用自己的理解说的 不是专业的术语 对于同样的多次请求 只会对第一次请求进行处理 多次请求返回的结果是相同的 幂等性的专业术语如下 选自百度百科 幂等 idempot
  • 数据科学与大数据分析项目练习-3将Apriori算法应用于R中提供的“Groceries”数据集

    R语言Apriori算法 项目要求 Project Start 规则生成和可视化 我们需要安装arules and arulesViz包 项目要求 生成频繁项目集满足下面条件 The minimum support threshold as
  • 异常检测-pyod包的入门使用

    本文github地址 pyod包的入门使用 文章目录 0异常检测简介 1pyod包简介 1 1注意事项 1 2函数的通用使用方法 1 3模型保存 1 4三个函数组 1 5不同模型在基准数据上的表现 1 6多个基准检测器的结合 2异常值检测示
  • 15 个 Android 通用流行框架大全

    转自 http www androidchina net 4920 html rd sukey 3903d1d3b699c208f96a43a12fc2e7ae683c66523214d79bc81eec0c330d577be318928c
  • 2021-06-22

    Ubuntu16 04系统安装ROS时出现sudo rosdep init ERROR default sources list file already exists etc ros rosdep sources list d 20 de
  • 操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)

    目录 第一章 实验相关概述 1 扫描算法 2 循环扫描算法 第二章 实验的目的及要求 1 目的 2 要求 第三章 实验的实现思路及步骤 1 扫描算法 2 循环扫描算法 第四章 实验结果分析 1 优缺点及区别 2 实现代码及截图 第五章 实验
  • 【论文阅读-ICSE-2021】CodeShovel: 构造方法级别上的源代码历史信息 Constructing Method-Level Source Code Histories

    CodeShovel Constructing Method Level Source Code Histories Conference ICSE 2021 Github https github com ataraxie codesho
  • Python GUI实战:全方位图形界面设计实践

    Python GUI实战 全方位图形界面设计实践 Python是一种强大的编程语言 且具备广泛的应用场景 其中 图形界面设计是Python的一个重要应用领域 通过图形界面设计 可以让用户更加直观 友好地使用软件 本文将介绍如何使用Pytho
  • 怎么删除win10系统的AdobeFlash

    随着移动端的趋势大流 HTML5应用场景更加的广泛 Flash逐渐走向没落 Flash短期时间并不会彻底消失掉 Adobe Flash FLASH不只是可以制作网页 还可以制作软件AIR 制作动画 制作游戏等等 现在最新版的软件改名为Ani
  • Linux writeback机制

    Linux 采用内存页来缓存磁盘文件内容 从而提高系统整体IO访问性能 这就是我们熟知的pagecache机制 对于进程的一次写文件操作 内核只是简单的把修改写到内存 并把页面标记为脏页 然后直接返回 具体的回写操作 由内核周期性的启动线程
  • springboot 快速集成Redis,非常简单

    gt gt 快速开始 创建springboot项目 引入redis pom依赖 如下
  • vue 软键盘弹起底部按钮顶起来的问题

    vue 软键盘弹起 底部按钮fixed固定定位的button按钮顶起来的问题 底部的button按钮被手机弹起的软键盘顶起来 影响页面美观 html的内容 div class hold div 现在data中定义一个记录高度的属性以及判断b
  • Qt导出数据到EXCEL的两种方式 (*****)

    目录 Qt如何将数据保存成CSV文件 Qt Tablewidget表格数据的导出和导入 Qt导出数据到EXCEL的两种方式 QT将QTableWidget数据保存至Excel Qt Tablewidget表格数据导出到 csv文件 测试 O