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

news/2024/7/21 4:20:30 标签: qt, excel

简介

在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.niftyadmin.cn/n/5234676.html

相关文章

Linux的权限(一)

目录 权限的本质 Linux权限的概念 如何创建与删除普通用户 创建普通用户&#xff1a; 设置用户密码&#xff1a; 删除普通用户&#xff1a; 删除与该用户关联的主目录和邮件目录 &#xff1a; su指令 sudo指令 Linux权限管理 Linux中文件访问者有三种“人” Linux…

Pytorch在二进制层面比较张量中的各行是否相同,并返回不相同的各行

代码实例&#xff1a; def unique(arr):# Finds unique rows in arr and return their indicesarr arr.cpu().numpy()arr_ np.ascontiguousarray(arr).view(np.dtype((np.void, arr.dtype.itemsize * arr.shape[1])))_, idxs np.unique(arr_, return_indexTrue)if torch.cu…

大学程序员的养生之道

呀哈喽&#xff0c;我是结衣。 今天给大家带来的是大学程序员的养生之道&#xff01; 作为一名大学生还没有深刻的感受到未来的恐怖&#xff0c;但每当我看到这些对程序员的评价还是不禁感慨。 不要让自己的学习之路变成这样啊&#xff01;程序员的职业发展&#xff1a;某编程语…

各类声音数据集大合集—乐器、车辆、鸟鸣、蜜蜂声音、歌曲、喇叭、人类声音不同等类型的声音数据集

最近收集了一大波关于各类声音的数据集&#xff0c;包含乐器、车辆、鸟鸣、蜜蜂声音、歌曲、喇叭、人类声音不同等类型的声音数据集&#xff0c;废话不多说&#xff0c;给大家逐一介绍&#xff01;&#xff01; 1、吉他和弦大调、小调数据集 吉他和弦大调、小调数据集&#x…

学校图书管理系统设计

基于ASP.NET MVC技术的图书管理系统的设计与实现 摘要&#xff1a;图书管理系统是一套高新科学技术和图书知识信息以及传统历史文化完美结合的体现。它改变了传统图书收藏的静态书本式图书服务特征&#xff0c;实现了多媒体存取、远程网络传输、智能化检索、跨库无缝链接、创造…

tar文件覆盖漏洞 CVE-2007-4559

文章目录 前言原理例题 [NSSRound#7 Team]新的博客方法一 手搓文件名方法二 python脚本 前言 做到[NSSRound#6 Team]check(Revenge)时发现是tar文件覆盖&#xff0c;但是对概念和执行过程理解不够深就光光记住脚本&#xff0c;所以在做本题[NSSRound#7 Team]新的博客时打算重新…

csapp-linklab

超详细csapp-linklab之第一阶段“输出学号”实验报告-CSDN博客 csapp-linklab之第二阶段“输出学号”实验报告-CSDN博客 csapp-linklab之第3阶段“输出学号”实验报告&#xff08;强弱符号&#xff09;-CSDN博客 csapp-linklab之第4阶段“输出学号”实验报告&#xff08;swi…

6.9 Windows驱动开发:内核枚举进线程ObCall回调

在笔者上一篇文章《内核枚举Registry注册表回调》中我们通过特征码定位实现了对注册表回调的枚举&#xff0c;本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及ThreadObCall线程回调&#xff0c;之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用…