QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能

简介

在Qt中,使用QTableViewQStandardItemModel来实现将数据导出到Excel和从Excel导入到QTableView的功能,而不使用第三方库(如QXlsx)。

效果

使用两个按钮
导出文件后的文件名是当前时间

将 QTableView 中的数据导出到Excel

//从tableview 导出到 EXcle
void MainInterface::on_pushButton_Export_clicked()
{
    //使用 QStandardItemModel模型
    QStandardItemModel* model = static_cast<QStandardItemModel*>(ui->tableView_staffInfo->model());
    //使用 QSqlQueryModel 模型
//    QSqlQueryModel* model = static_cast<QSqlQueryModel*>(ui->tableView_staffInfo->model()); //(两种任选一种都可以)

    //给导出文件名加上当前时间
    QString filePath = QDateTime::currentDateTime().toString("../yyyy_MM_dd hh_mm_ss") + ".xls"; //项目目录的上一级目录
//    qDebug()<<str;

    //设置文件路径
    QFile file(filePath);
    if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        QTextStream out(&file);

        for (int column = 0; column < model->columnCount(); column++) {
            out << model->headerData(column, Qt::Horizontal).toString() << "\t";
        }
        out << "\n";

        for (int row = 0; row < model->rowCount(); row++) {
            for (int column = 0; column < model->columnCount(); column++) {
                QModelIndex index = model->index(row, column);
                out << model->data(index).toString() << "\t";
            }
            out << "\n";
        }

        file.close();
    }
    //提示导出完成
    QMessageBox::information(this, "提示", "导出完成。        ");
}

//这段代码将 QTableView 中的数据以制表符分隔的形式写入到Excel文件中。

从Excel导入数据到 QTableView


//从 excel导入到 tableview
void MainInterface::on_pushButton_Inport_Data_clicked()
{
    //使用 QStandardItemModel模型
    QStandardItemModel* model = new QStandardItemModel();
    ui->tableView_staffInfo->setModel(model);

//    QString filePath = "path_to_excel_file.xls";

    // 获取文件路径
    QString filePath = QFileDialog::getOpenFileName(this,
                                                    "打开的界面标题",
                                                    "C:\\Users\\18584\\Desktop\\qtcode",//默认打开目录+文件
                                                    "excel(*.xls)");//文件类型过滤
    //判断文件路径是否为空
    if(filePath.isEmpty()){
        QMessageBox::warning(this, "提示", "文件路径错误。");
        return;
    }else{

    }
    
    QFile file(filePath);
    if (file.open(QIODevice::ReadOnly)) {
        QTextStream in(&file);

        QString line = in.readLine();
        QStringList header = line.split("\t");
        model->setHorizontalHeaderLabels(header);

        while (!in.atEnd()) {
            line = in.readLine();
            QStringList data = line.split("\t");
            QList<QStandardItem*> items;
            for (int i = 0; i < data.size(); i++) {
                items.append(new QStandardItem(data.at(i)));
            }
            model->appendRow(items);
        }

        file.close();
    }
    //提示导入完成
    QMessageBox::information(this, "提示", "导入完成。        ");

}
//这段代码从Excel文件中读取数据,将表头设置为QTableView的水平表头,
//然后逐行将数据添加到QTableView中的QStandardItemModel。

其他

请注意,这种方法基于文本的导入和导出,可能无法完全保留原始的数据类型和格式。如果有特殊的数据类型需要处理,或者需要更高级的功能,推荐使用专门的Excel处理库(如QXlsx)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/211976.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS BFC特性和应用

目录 1&#xff0c;介绍2&#xff0c;BFC布局规则3&#xff0c;创建BFC4&#xff0c;BFC应用1&#xff0c;浮动子元素使父级高度坍塌2&#xff0c;非浮动元素被浮动元素覆盖3&#xff0c;margin 合并1&#xff0c;父子 margin 合并&#xff1a;父级和第1个/最后1个子元素2&…

Ubuntu 安装 MySQL8 配置、授权、备份、远程连接

目录 0100 系统环境0200 下载0300 安装0400 服务管理0401 关闭、启动、重启服务0402 查看服务状态 0500 查看配置文件0600 账号管理0601 添加账号0602 删除账号0603 修改密码0604 忘记root密码 0700 自动备份0800 远程访问 0100 系统环境 [rootlocalhost ~]# cat /proc/versio…

SQL Server数据库部署

简介 21世纪&#xff0c;人类迈入了“信息爆炸时代”&#xff0c;大量的数据、信息在不断产生&#xff0c;伴随而来的就是如何 安全、有效地存储、检索和管理它们。对数据的有效存储、高效访问、方便共享和安全控制已经成 为信息时代亟待解决的问题。数据库&#xff08;Databas…

锐捷RG-UAC应用网关 前台RCE漏洞复现

0x01 产品简介 锐捷RG-UAC系列应用管理网关是锐捷自主研发的应用管理产品。 0x02 漏洞概述 锐捷RG-UAC应用管理网关 nmc_sync.php 接口处存在命令执行漏洞&#xff0c;未经身份认证的攻击者可执行任意命令控制服务器权限。 0x03 复现环境 FOFA&#xff1a;app"Ruijie-R…

〖大前端 - 基础入门三大核心之JS篇㊹〗- DOM事件委托

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

认识K线形态,把握买入卖出时机

一、认识K线 1、K线的含义 股票一天之内有4个最关键的价格&#xff0c;开盘价、收盘价、最高价和最低价&#xff0c;把这个价格显示在图上就是K线图。 以金斗云智投电脑版为例&#xff0c;打开软件&#xff0c;任意搜索一支个股&#xff0c;就可以看到这支股票的K线。 股市新…

智加科技获全国首张重卡无人驾驶开放道路测试牌照

2023年12月1日&#xff0c;智加科技获得苏州市智能网联汽车无人化测试牌照。该牌照也是江苏省及国内首张无人重卡开放高速公路全路段全场景全息路网&#xff08;S17苏台高速&#xff09;道路测试牌照。 该重卡无人驾驶开放道路测试牌照&#xff0c;经由苏州市智能网联汽车联席小…

假设检验和统计推断:从样本到总体

1. 写在开头 统计学中的假设检验和统计推断是从样本数据中对总体进行推断和判断的关键工具。本文将深入探讨假设检验的类型,并结合具体的场景和例子,展示不同类型假设检验的应用。 2. 单样本 t 检验 2.1 概述 单样本 t 检验(One-sample t-test)是一种用于比较一个样本的…

Asp.net core WebApi 配置自定义swaggerUI和中文注释,Jwt Bearer配置

1.创建asp.net core webApi项目 默认会引入swagger的Nuget包 <PackageReference Include"Swashbuckle.AspNetCore" Version"6.2.3" />2.配置基本信息和中文注释&#xff08;默认是没有中文注释的&#xff09; 2.1创建一个新的controller using Micr…

卷积神经网络-3D医疗影像识别

文章目录 一、前言二、前期工作1. 介绍2. 加载和预处理数据 二、构建训练和验证集三、数据增强四、数据可视化五、构建3D卷积神经网络模型六、训练模型七、可视化模型性能八、对单次 CT 扫描进行预测 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&a…

Mongodb安装及其使用

1.Linux系统上安装Mongodb 在usr/local文件夹下创建mongo文件夹 下载mongodb包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.5.tgz解压mongodb tar -zxvf mongodb-linux-x86_64-rhel70-6.0.5.tgz更改文件夹的名字 mv mongodb-linux-x86_64-rh…

竞赛选题 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…

1.3 Linux文件系统

一、Linux文件系统结构 Linux下都是文件&#xff0c;所以没有Windows一样的盘&#xff0c;有的只有文件夹。 cd /    // 进入根目录 ls     // 查看根目录"/"下的文件及文件夹 /bin    &#xff1a;存储了很多系统命令&#xff0c; /usr/sbin 也存储了…

数据库表的管理

表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似&#xff0c;都是 按行和列的格式组织的。每行代表一条唯一的记录&#xff0c;每列代表记录中的一个字段。例如&#xff0c;在包含公 司员工信息的表中&#xff0c;每行代表一名员工…

Python zip函数及用法与lambda表达式及用法

Python zip函数及用法 zip() 函数可以把两个列表“压缩”成一个 zip 对象&#xff08;可迭代对象&#xff09;&#xff0c;这样就可以使用一个循环并行遍历两个列表。为了测试 zip() 函数的功能&#xff0c;我们可以先在交互式解释器中“试验”一下该函数的功能。 >>&g…

群晖Video Station 添加海报墙-新方法

海报墙 一般我们找到的都是mp4、mkv等格式的视频资源&#xff0c;而没有像上图这样的海报资源&#xff0c;那要怎样实现海报墙呢&#xff1f; 按照以前的方法&#xff0c;是可以通过The Movie Database的API Key来搜刮电影海报信息&#xff0c;但是现在这个方法不行了 现在介绍…

力扣66. 加一

文章目录 力扣66. 加一示例代码实现总结收获 力扣66. 加一 示例 代码实现 class Solution {public int[] plusOne(int[] digits) {int ndigits.length;for(int in-1;i>0;i--){if(digits[i]!9){digits[i];for(int ji1;j<n;j){digits[j]0;}return digits;}}int[] resnew i…

使用String.valueOf()的坑

说明&#xff1a;记录一次使用String.valueOf()的坑&#xff0c;以下是一段有问题的代码&#xff1a; String count String.valueOf(listData.get(0).get(0).get("count");if (StringUtils.isBlank(count) || "0".equals(count)) {result.setResult(page)…

剑指 Offer(第2版)面试题 14:剪绳子

剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子 剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子解法1&#xff1a;动态规划解法2&#xff1a;数学 剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子 题目来源…
最新文章