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

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.kler.cn/a/155446.html

相关文章:

  • OCR识别铁路电子客票
  • HarmonyOS 如何实现传输中的数据加密
  • WebSocket和HTTP协议的性能比较与选择
  • 以色列支付龙头遭DDoS攻击,各地超市加油站等POS机瘫痪
  • qt QVideoWidget详解
  • Vite初始化Vue3+Typescrpt项目
  • 怎么检测电脑电源?电脑电源检测系统软件如何助力?
  • 文案二次创作软件,文案二次创作的软件
  • 【Python】tensorflow学习的个人纪录(3)
  • 力扣每日一题day26[42. 接雨水]
  • 游泳馆会员服务预约管理系统预约小程序效果如何
  • TypeScript 的安装与使用
  • python每日一题——21搜索二维矩阵
  • JVM——内存溢出和内存泄漏
  • 【知识】稀疏矩阵是否比密集矩阵更高效?
  • python动态圣诞下雪图
  • vue-历史模式部署
  • 【面试HOT200】回溯篇
  • Node.js版本管理工具NVM(Node Version Manager)的使用
  • leetcode - 矩阵区域和
  • 第十五届蓝桥杯模拟赛(第二期)
  • 软件生命周期四个阶段SDLC
  • Day59权限提升-win溢出漏洞ATSCps提权
  • 三菱(MITSUBISHI)CNC数据采集
  • 打印时如何让打印字体更加平滑 不那么锯齿化
  • csapp-linklab