基于QT的EXCELL文件简单处理及文件打包封装

本文介绍了如何使用QT开发环境构建一个简单的工具,实现XLS文件的读取、Excel数据处理,并将处理后的数据保存为C文件。涉及文件路径获取、QAxObject用于Excel数据获取、UI设计以及QT程序的打包和发布。
摘要由CSDN通过智能技术生成

整体设计思路

本项目的设计初衷是采用QT去开发一款简单数据处理工具,能够实现读取EXCEL表格文件,并对读取的Excell文件进行数据处理,最终将处理后的数据导出为对应的C文件。
该项目的UI比较简单,主要包含工具栏的打开,保存。如下图所示。
在这里插入图片描述
立项之前,对整体设计内容进行一个框架搭建非常重要,这能够为后续的开发提供一个清晰的脉络走向,明确每个环节的目标所需,便于后续的工作展开。
此项目的整个开发过程如下图所示,包括以下几个部分。Markdown的基本语法知识。

1.开发环境与应用

QtCreator包含有众多的库与接口函数,支持C++与其他语言开发,强大的开发功能和可移植性,足以支持我们去开发一款适用于自身需求的工具,其下载链接如下:
https://download.qt.io/archive/qtcreator
Enigma Virtual Box实用简单快捷,能够高效快速的将QT环境下开发的应用程序,打包封装成为一个独立的EXE执行文件,链接如下:
https://pan.quark.cn/s/9014b4d4b8fe

2.QT的程序编写

2.1. 文件的读取与路径获取

点击Ui界面上的打开按钮,根据信号与槽函数的执行机制,将会执行下列代码,以此实现文件的打开,同时将获取到的文件路径存放在字符串列表中。

    connect(ui->action_Open,&QAction::triggered,this,[=]
    {
        QString curPath = QCoreApplication::applicationDirPath();
        QString dilTile = QString::fromLocal8Bit("打开文件");
        QString filter = QString::fromLocal8Bit("(*.h *.cpp);;(*.txt);;(*.doc);;(*.xls);;(*.*)");
        QStringList  filenames = QFileDialog::getOpenFileNames(this,dilTile,curPath,filter);
        ui->listWidget_Display->addItems(filenames); //显示在列表中
        readExcel(filenames);//读取EXCEL文件
    });

2.2. Qaxobject进行EXCEL表格的数据获取

Qaxobject是实现EXCEL文件读取的关键所在,关于这部分内容网上有许多说明与教程,这里不做赘述。
下列代码参考了部分博主有关EXCEL处理的介绍内容,在之前已经获取的文件路径的基础上,使用QAxobject去读取EXCEL的内容,并将其存放在容器中。(注:部分程序有些累赘,并没有在写法上进行优化,可能看着会觉得啰嗦。)
在这里插入图片描述
这里主要是获取温度,电阻和参考阻值对应的数值。

//读EXCEL文件
void readExcel(QStringList filePaths)
{
    QAxObject excel("Excel.Application"); //加载Excel驱动
    excel.setProperty("Visible", false);//不显示Excel界面,如果为true会看到启动的Excel界面
    QAxObject *work_books = excel.querySubObject("WorkBooks");
    work_books->dynamicCall("Open (const QString&)", filePaths); //打开指定文件
    QAxObject *work_book = excel.querySubObject("ActiveWorkBook");
    QAxObject *work_sheets = work_book->querySubObject("Sheets");  //获取工作表
    QString ExcelName;
    static int row_count = 0,column_count = 0;  //定义行数变量和列数变量
    int sheet_count = work_sheets->property("Count").toInt();  //获取工作表数目

    if(sheet_count > 0)
    {
        QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1); //设置为 获取第一页 数据
        QAxObject *used_range = work_sheet->querySubObject("UsedRange");
        QAxObject *rows = used_range->querySubObject("Rows");
        row_count = rows->property("Count").toInt();  //获取行数
//        qDebug()<<row_count;//打印行数
        QAxObject *column = used_range->querySubObject("Columns");
        column_count = column->property("Count").toInt();  //获取列数
//        qDebug()<<column_count;//打印列数
        //获取第一行第一列数据
        ExcelName = work_sheet->querySubObject("Cells(int,int)", 1,1)->property("Value").toString();

        for (int i =2; i <= row_count; i++)  //行数,从第二行开始读取
        {
            for (int j = 1; j <= column_count;j++)     //列数,从第一列开始读取
            {
                int txt = work_sheet->querySubObject("Cells(int,int)", i,j)->property("Value").toUInt(); //获取单元格内容
                arr.append(txt);
            }
            array.append(arr);
            arr.clear();	//将每行数据存储到array后,清空arr,避免下次循环时数据累计;arr.appeng()是添加不是赋值
        }

        work_book->dynamicCall("Close(Boolean)", false);  //关闭文件
        excel.dynamicCall("Quit(void)");  //退出
        ADC_ValueCalculate(row_count,column_count); //获取到的数据进行处理
    }
}

2.3. 处理EXCEL表格数据

此部分过程是将获取到的数值做简单的运算。
在这里插入图片描述
以下是将表格中的电阻和参考电阻对于的数据,从之前存放的容器中取出来,并作出简单的运算,存放在新的容器中。

void ADC_ValueCalculate(int Row,int Colum)     //ADC值得运算转化
{
  uint8_t  i=0;
  int tADC_Value1; //暂时存放ADC值
  int tADC_Value2;
  //采用遍历去获取容器中存放的值
  for(i=0;i<Row-1;i++)
  {
    tADC_Value1=array.at(i).at(1);
    tADC_Value2=array.at(i).at(2);
    tADC_Value2+=tADC_Value1;
    tADC_Value1= tADC_Value1*4095/tADC_Value2;
    ADC_Value.append(tADC_Value1);
    qDebug()<<tADC_Value1;
  }
}

2.4. 保存为C文件或其他文件

点击UI界面上的保存按键,触发以下操作,将文件保存为对应得C文件或其他格式文件。

//文件保存设置
void MainWindow::on_action_Save_triggered()
{
    QString fileName =  QFileDialog::getSaveFileName(this,"打开文件","E:/","All(*.*);;C files (*.c);;Text files (*.txt);;XLS files (*.xls)");
        if(fileName.isNull())
        {
            QMessageBox::information(this,"提示","未保存选中文件");
        }

        //实例化一个文件对象
        QFile file(fileName);   //使用获取到的文件路劲,实例化一个文件对象,后期对文件的操作都是基于该对象

        //打开文件
        if(!file.open(QFile::ReadWrite))
        {
            return;
        }

        //读取textEdit中的内容
        QString msg;
        QString msg2;
        msg.append("adc_value[10]={");
        Vec2Str(ADC_Value,msg2);
        msg+=msg2;
        msg.append("};");
        QByteArray ba= msg.toLatin1(); // must
        char*  ch;

        ch=ba.data();

        //将textEdit中的内容写入到文件中
        file.write(ch);
        //关闭文件
        file.close();
}

3.UI布局

QT支持可视化设计,控件的添加布局,可以在工程文件下的设计中进行修改。如下图所示,项目文件的结构树如下,点击红框中对于的文件,即可修改该类所包含的设计师界面。
在这里插入图片描述
该项目的UI设计比较简单明了,主要包括菜单栏,工具栏 ,主界面的布局。
对应得控件可以从Layouts中直接拖拽出来,也可以程序编写,进行UI的布局设计。
在这里插入图片描述
其中与程序相关联的两个按键如打开保存。
在这里插入图片描述
当然,图标的添加需要开发者自己去添加QT资源文件,然后在项目中添加存放图片的文件夹。
在这里插入图片描述

4.文件的打包与发布

4.1QT控制台指令打包QT程序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2内容未完待更新

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值