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

news/2025/2/13 21:42:05/

简介

在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.ppmy.cn/news/1255577.html

相关文章

基于英特尔平台及OpenVINO2023工具套件优化文生图任务

当今&#xff0c;文生图技术在很多领域都得到了广泛的应用。这种技术可以将文本直接转换为逼真的图像&#xff0c;具有很高的实用性和应用前景。然而&#xff0c;由于文生成图任务通常需要大量的计算资源和时间&#xff0c;如何在英特尔平台上高效地完成这些计算是一个重要的挑…

C++ Easyx 三子棋

目录 思路 框架​编辑 读取操作 数据操作 绘制画面 游戏的数据结构 用二维数组来模拟棋盘格 赢的情况 平局情况 Code 代码细节部分 &#xff08;1&#xff09;初始化棋盘格 &#xff08;2&#xff09; 初始化棋子类型​编辑 事件处理部分 落子 框架内代码的完善 数据处…

分页助手入门以及小bug,报sql语法错误

导入坐标 5版本以上的分页助手 可以不用手动指定数据库语言&#xff0c;它会自动识别 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency&g…

【2023.11.29练习】希尔排序的实现

题目描述&#xff1a; 本题要求实现一趟希尔排序函数&#xff0c;待排序列的长度1<n<1000。 函数接口定义&#xff1a; void ShellInsert(SqList L,int dk); 其中L是待排序表&#xff0c;使排序后的数据从小到大排列。 ###类型定义&#xff1a; typedef int KeyTy…

MySQL进阶部分

存储引擎 MySQL体系结构图&#xff1a; 连接层&#xff1a; 最上层是一些客户端连接服务&#xff0c;主要完成一些类似于连接处理 &#xff0c;授权认证及相关的安全方案。服务器也会为安全接入的每个用户端验证它所具有的操作权限。 服务层&#xff1a; 第二层架构主要完成大…

App测试之App日志收集及adb常用命令

文章目录 前言一、adb是什么1.APP测试收集手机日志常用的工具2.adb下载与安装3.ADT/SDK/ADB是什么4.adb连接真机 二、adb常用命令三、android系统日志文件1.logcat日志文件2.logcat日志文件分析 四、分析crash & ANR 日志1.发生crash如何分析2.发生ANR如何分析 总结扩展&am…

springboot centos集成 OpenOffice 实现 在线预览 doc excel docx 成pdf的 并且包含中文包和英文包和安装

我的资源里面有 springboot linux 集成 OpenOffice 实现在线预览 docx doc excel img等功能&#xff0c; 报问题 &#xff1a;no suitable windowing system found, exiting. 解决方案 yum groupinstall "X Window System"如果还是报这个错 执行 yum groupinstall …

数据结构实验任务六 :基于 Dijsktra 算法的最短路径求解

本次代码为实验六:基于 Dijsktra 算法的最短路径求解实现。本实验的重点在于对于Dijsktra算法的理解。有关Dijsktra的资料可以参考有关博文&#xff1a; 图论&#xff1a;Dijkstra算法——最详细的分析&#xff0c;图文并茂&#xff0c;一次看懂&#xff01;-CSDN博客 以下附上…