Qt 解析EXcel文件

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 写代码需要将excel中的文件导入到数据库中 网上找到以为大神写的,但是当初没有保存,也没有找到 我几乎是原分不动拔下来的,希望大神莫怪
void AddDialog::readExcel(QString url)
{
    QAxObject excel("Excel.Application");
    excel.setProperty("Visible",true);
    QAxObject *work_books = excel.querySubObject("WorkBooks");
    work_books->dynamicCall("Open (const QString&)",QString(url));
    QVariant title_value = excel.property("Caption");                                                   //获取标题信息
    //    qDebug()<<"读取Excel标题为:"<<title_value;
    QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
    QAxObject *work_sheets = work_book->querySubObject("Sheets");                                       //Sheets也可以换用WorkSheets
    int sheet_count = work_sheets->property("Count").toInt();                                           //获取工作表数目
    //    qDebug()<<"当前工作表数目为:"<<sheet_count;
    exceltip = new Excel(this);
    for(int k=1;k<=sheet_count;k++)
    {
        QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k);                              //Sheets(int)也可以用Worksheets(int)
        QString work_sheet_name = work_sheet->property("Name").toString();                               //获取工作表名称
        QString message = QString("Sheet")+QString::number(k,10)+QString("name");
        //        qDebug()<<message<<work_sheet_name;
        if(sheet_count>0)
        {
            QAxObject *work_sheet = work_book->querySubObject("Sheets(int)",k);
            QAxObject *used_range = work_sheet->querySubObject("UsedRange");
            QAxObject *rows = used_range->querySubObject("Rows");
            //            QAxObject *columns = used_range->querySubObject("Columns");
            int row_start = used_range->property("Row").toInt();                                            //获取起始行
            int columns_start = used_range->property("Column").toInt();                                     //获取起始列
            int row_count = rows->property("Count").toInt();                                                //获取行数
            //           int column_count = columns->property("Count").toInt();                                          //获取列数
            exceltip->show();
            ui->pushButton_Cancle->setEnabled(false);
            ui->pushButton_close->setEnabled(false);
            ui->pushButton_save->setEnabled(false);
            ui->pushButton_Excel->setEnabled(false);
            ui->pushButton_update->setEnabled(false);
            exceltip->setcount(row_count-1,work_sheet_name);
            for(int i=row_start+1;i<=row_count;i++)
            {
                /***********************************
                * 数据解析函数函数
                * 将Excel中的数据分条取出
                * 的别值得注意的是
                * 由于数据主码是一当前时间为主码
                * 所以要调用延时函数延时1秒
                * 防止数据主码相同为数据加载失败
               ****************************************************************************************************************/
                QAxObject *cell[13];
                QVariant cell_value[13];
                cell[0] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+0);
                cell_value[0] = cell[0]->property("Value");                                          //获取单元格内容
                cell[1] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+1);
                cell_value[1] = cell[1]->property("Value");
                cell[2] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+2);
                cell_value[2] = cell[2]->property("Value");
                cell[3] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+3);
                cell_value[3] = cell[3]->property("Value");
                cell[4] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+4);
                cell_value[4] = cell[4]->property("Value");
                cell[5] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+5);
                cell_value[5] = cell[5]->property("Value");
                cell[6] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+6);
                cell_value[6] = cell[6]->property("Value");
                cell[7] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+7);
                cell_value[7] = cell[7]->property("Value");
                cell[8] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+8);
                cell_value[8] = cell[8]->property("Value");
                cell[9] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+9);
                cell_value[9] = cell[9]->property("Value");
                cell[10] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+10);
                cell_value[10] = cell[10]->property("Value");
                cell[11] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+11);
                cell_value[11] = cell[11]->property("Value");
                cell[12] = work_sheet->querySubObject("Cells(int,int)",i,columns_start+12);
                cell_value[12] = cell[12]->property("Value");
                datasave->CRETM = gettimetss();
                datasave->pro_name = cell_value[0].toString();
                datasave->PSTM = cell_value[1].toString();
                datasave->PETM = cell_value[2].toString();
                datasave->Par_name = cell_value[3].toString();
                datasave->PARSTM = cell_value[4].toString();
                datasave->PARETM = cell_value[5].toString();
                datasave->Sta_name = cell_value[6].toString();
                datasave->STASTM = cell_value[7].toString();
                datasave->STAETM = cell_value[8].toString();
                datasave->INFOR = cell_value[9].toString();
                datasave->DELTM = cell_value[10].toString();
                datasave->REASION = cell_value[11].toString();
                datasave->FINTM = cell_value[12].toString();
                QString sql_insert = "insert into project values('";
                sql_insert +=datasave->pro_name;
                sql_insert +="','";
                sql_insert +=datasave->PSTM;
                sql_insert +="','";
                sql_insert +=datasave->PETM;
                sql_insert +="','";
                sql_insert +=datasave->Par_name;
                sql_insert +="','";
                sql_insert +=datasave->PARSTM;
                sql_insert +="','";
                sql_insert +=datasave->PARETM;
                sql_insert +="','";
                sql_insert +=datasave->Sta_name;
                sql_insert +="','";
                sql_insert +=datasave->STASTM;
                sql_insert +="','";
                sql_insert +=datasave->STAETM;
                sql_insert +="','";
                sql_insert +=datasave->INFOR;
                sql_insert +="','";
                sql_insert +=datasave->FINTM;
                sql_insert +="','";
                sql_insert +=datasave->DELTM;
                sql_insert +="','";
                sql_insert +=datasave->REASION;
                sql_insert +="','";
                sql_insert +=datasave->CRETM;
                sql_insert +="')";
                QSqlQuery insert_data(*projectdb);
                insert_data.exec(sql_insert);
                //                qDebug()<<sql_insert;
                emit sys_data();
                exceltip->setnumber(i);
                delaymsec(10);
                /****************************************************************************************************************/
            }
        }
    }
    exceltip->setfinish(true);
    if(exceltip->exec() == QDialog::Accepted)
    {
        ui->pushButton_Cancle->setEnabled(true);
        ui->pushButton_close->setEnabled(true);
        ui->pushButton_save->setEnabled(true);
        ui->pushButton_Excel->setEnabled(true);
        ui->pushButton_update->setEnabled(true);
        getname();
    }
}
/*******************************************************************************/
void AddDialog::on_pushButton_Excel_clicked()               //打开一个Excel文件,完了要调用Excel解析函数
{
    QString filename = QFileDialog::getOpenFileName(this);
    if(!filename.isEmpty())
    {
        readExcel(filename);
    }
}
//自定义延时函数   //无阻塞延时函数
void AddDialog::delaymsec(int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while (QTime::currentTime()<dieTime)
    {
        QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    }
}
目录
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
4天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
47 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1天前
|
自然语言处理 文字识别 数据处理
多模态文件信息抽取:技术解析与实践评测!
在大数据和人工智能时代,企业和开发者面临的挑战是如何高效处理多模态数据(文本、图像、音频、视频)以快速提取有价值信息。传统方法效率低下,难以满足现代需求。本文将深度评测阿里云的多模态文件信息抽取解决方案,涵盖部署、应用、功能与性能,揭示其在复杂数据处理中的潜力。通过自然语言处理(NLP)、计算机视觉(CV)、语音识别(ASR)等技术,该方案助力企业挖掘多模态数据的价值,提升数据利用效率。
12 4
多模态文件信息抽取:技术解析与实践评测!
|
1天前
|
文字识别 自然语言处理 算法
从多模态到精准洞察:深度解析多模态文件信息提取解决方案!
阿里云推出《多模态数据信息提取》解决方案,涵盖文本、图像、音频、视频等多种数据形式的自动化处理。本文从部署体验、功能验证到实际应用,全面解析该方案的能力与潜力,帮助开发者高效提取和整合复杂数据,提升工作效率...
14 3
从多模态到精准洞察:深度解析多模态文件信息提取解决方案!
|
30天前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
32 6
按条件将Excel文件拆分到不同的工作表
|
29天前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
39 6
|
29天前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
40 6
|
2月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
32 1
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
44 3
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####

推荐镜像

更多