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

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)。

相关文章:

  • AI创作ChatGPT源码+AI绘画(Midjourney绘画)+DALL-E3文生图+思维导图生成
  • solidity案例详解(五)能源电力竞拍合约
  • 【Java面试——JUC全局观、原子类、锁、集合类、线程池、工具类】
  • 《凤凰项目》读书笔记
  • 【迅搜05】索引配置(二)字段定义与设计
  • 开源播放器GSYVideoPlayer + ViewPager2 源码解析
  • js进阶笔记之Promise
  • 第一章 分别使用Create-React-App、Vite、Umi Max搭建React项目
  • Linux:进程间通信
  • 【【FPGA 之 MicroBlaze 自定义IP核 之 呼吸灯实验】】
  • 深入理解同源限制:网络安全的守护者(下)
  • css 3D背景反转实现
  • NIO--07--Java lO模型详解
  • 如何打印社保参保凭证
  • python之pyqt专栏5-信号与槽1
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • JS学习笔记——闭包
  • Phpstorm怎样批量删除空行?
  • php中curl和soap方式请求服务超时问题
  • redis学习笔记(三):列表、集合、有序集合
  • Vue.js源码(2):初探List Rendering
  • 聚簇索引和非聚簇索引
  • 模型微调
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 【云吞铺子】性能抖动剖析(二)
  • Nginx实现动静分离
  • 仓管云——企业云erp功能有哪些?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #android不同版本废弃api,新api。
  • #前后端分离# 头条发布系统
  • ${factoryList }后面有空格不影响
  • $refs 、$nextTic、动态组件、name的使用
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (五)MySQL的备份及恢复
  • (一)WLAN定义和基本架构转
  • (转)nsfocus-绿盟科技笔试题目
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 依赖注入和配置系统
  • .NET与 java通用的3DES加密解密方法
  • .NET中两种OCR方式对比
  • [ 蓝桥杯Web真题 ]-布局切换
  • [Angular 基础] - 表单:响应式表单
  • [HDU 3555] Bomb [数位DP]
  • [Head First设计模式]策略模式
  • [IOI2007 D1T1]Miners 矿工配餐
  • [ITIL学习笔记]之事件管理(2)
  • [JavaScript]如何讓IE9, IE8, IE7, IE6關閉視窗時不彈出對話訊息
  • [LaTex]arXiv投稿攻略——jpg/png转pdf
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘
  • [NOI 2016]优秀的拆分
  • [PAT练级笔记] 44 Basic Level 1044 火星数字