excel扒数据到ini文件小工具

python:读取xml、excel、ini配置文件方法 一、读取excel文件 import xlrd file_Name = "userInfo.xlsx" open_excel = xlrd.open_workbook(file_Name,encoding_override='utf-8') #获取表列表,取第一个表 sheet = open_excel.sheets()[0] #获取行数、列数 sheet_row_amount = sheet... 阅读详情

一、源码

注释很详细,就不讲了

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QVariant>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private:
    void readFile();
    bool isXlsxFile(const QString &filePath);

    void readFileIni();
    bool isIniFile(const QString &filePath);
    void selectFileIni();
    void chooseFileIni();
    void setUIIni(const QStringList keys, const QVariant value);
    bool isSectionEmpty();

    void matchData();
    bool isFilesOpenEmpty();
    void dataHandle();
    void brushUIIni();


private:
    QList<QList<QVariant>> xls_data;
    QString filepathini;
    QString filepathexcel;
    QStringList sectionKeys; // 用于存储特定节的所有键
    QVariant valueIni;
    QStringList keysIniMatch;
    QVariant valuesIniMatch;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDir>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QFileInfo>
#include <QDebug>
#include <QAxObject>
#include <QVariant>
#include <QMap>
#include <QStandardItemModel>
#include <QSettings>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    readFile();
    selectFileIni();
    matchData();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::readFile()
{
    connect(ui->pushButton, &QPushButton::clicked, this, [=](){
        QString currentpath = QDir::homePath();
        QString openfiletitle = "请选择文件";
        QString filefilter = "all(*.*)";
        filepathexcel = QFileDialog::getOpenFileName(this, openfiletitle, currentpath, filefilter);

        if(filepathexcel.isEmpty())
        {
            QMessageBox::warning(this, "警告!!", "文件夹不能为空!");
            return;
        }

        QFileInfo info(filepathexcel);//获取文件信息
        ui->lineEdit->setText(info.fileName());

        //excel表格读取
        QAxObject *excel = new QAxObject(this);
        excel->dynamicCall("Visible(bool)", false);
        if (isXlsxFile(filepathexcel))
        {
            excel->setControl("Excel.Application");// 加载 Microsoft Excel 控件
        }
        else
        {
            excel->setControl("ket.Application");  // 加载 WPS Excel 控件
        }

        excel->setProperty("Visible", false);  // 不显示 Excel 窗体
        QAxObject* workBooks = excel->querySubObject("WorkBooks");  //获取工作簿集合
        workBooks->dynamicCall("Open(const QString&)", filepathexcel); //打开打开已存在的工作簿
        QAxObject* workBook = excel->querySubObject("ActiveWorkBook"); //获取当前工作簿

        QAxObject* sheets = workBook->querySubObject("Sheets");  //获取工作表集合,Sheets也可换用WorkSheets
        QAxObject* sheet = workBook->querySubObject("WorkSheets(int)", 1);//获取工作表集合的工作表1,即sheet1

        //获取该sheet的使用范围对象(一般读取 Excel 时会选取全部范围)
        QAxObject* usedRange = sheet->querySubObject("UsedRange");

        /*
        //获取 sheet 的指定范围(一般写入数据时,会选取指定范围)
        QAxObject* usedRange = sheet->querySubObject("Range(const QString)", "A1:C12");

        //获取 sheet 的指定范围(一般修改数据时,会选取指定单元格)
        QAxObject* usedRange = sheet->querySubObject("Range(QVariant,QVariant)", "A6");
        */

        //读取单元格内容
        QVariant var = usedRange->dynamicCall("Value");
        delete usedRange;

        //数据转换
        QVariantList varRows = var.toList();
        if (varRows.isEmpty()) {
            return;
        }

        const int rowCount = varRows.size();

        QVariantList rowData;

        for (int i = 0; i < rowCount; i++){
            rowData = varRows[i].toList();
            int clumnCount = rowData.size();
            if(rowData.count() > clumnCount)
            {
                clumnCount = rowData.count();
            }
            xls_data.push_back(rowData);
        }

        //写进UI表格
        // 创建模型
        QStandardItemModel *model = new QStandardItemModel(rowCount, rowData.size(), this);
        for (int i = 0; i < xls_data.count(); i++) {
            for (int j = 0; j < xls_data.at(i).count(); j++) {
                QStandardItem *item = new QStandardItem(QString(xls_data.at(i).at(j).toByteArray()));
                model->setItem(i, j, item);
//                delete item;
            }
        }
        ui->tableView->setModel(model);

        // 隐藏行号和列号
        ui->tableView->verticalHeader()->hide();
        ui->tableView->horizontalHeader()->hide();
    });
}

bool MainWindow::isXlsxFile(const QString &filePath)
{
    QFileInfo fileInfo(filePath);
    QString extension = fileInfo.suffix().toLower();

    // 列出常见的文本文件扩展名
    static const QStringList textExtensions = {"xlsx", "xls", "xlsm"};

    return textExtensions.contains(extension);
}

void MainWindow::selectFileIni()
{
    //选择ini文件
    connect(ui->pushButton_ini, &QPushButton::clicked, this, [=](){
        if(isSectionEmpty())
        {
            QMessageBox::warning(this, "警告", "请先输入查询的节名称!!!");
            return;
        }
        else
        {
            chooseFileIni();
            readFileIni();
        }
    });
}

void MainWindow::chooseFileIni()
{
    QString currentpath = QDir::homePath();
    QString openfiletitle = "请选择文件";
    QString filefilter = "all(*.*)";
    filepathini = QFileDialog::getOpenFileName(this, openfiletitle, currentpath, filefilter);

    if(filepathini.isEmpty())
    {
        QMessageBox::warning(this, "警告!!", "文件夹不能为空!");
        return;
    }
    else
    {
        //是否为ini文件
        if(isIniFile(filepathini))
        {
            QFileInfo info(filepathini);//获取文件信息
            ui->lineEdit_ini->setText(info.fileName());
        }
    }
}

void MainWindow::readFileIni()
{
    //创建qsettings对象
    QSettings settings(filepathini, QSettings::IniFormat);

    //读取
    const QString sectionName = ui->lineEdit_section->text();

    // 读取所有键的前缀
    QStringList allKeys = settings.allKeys();

    // 遍历所有键,找到属于特定节的键
    for (const QString &key : allKeys) {
        if (key.startsWith(sectionName)) {
            // 去掉节前缀
            QString cleanKey = key.mid(sectionName.size() + 1);
            sectionKeys.append(cleanKey);
        }
    }

    // 遍历特定节的所有键并读取对应的值
    foreach (const QString &key, sectionKeys) {
        valueIni = settings.value(key);
//        qDebug() << key << ": " << value.toString();
        setUIIni(sectionKeys, valueIni);
    }
}

bool MainWindow::isIniFile(const QString &filePath)
{
    QFileInfo fileInfo(filePath);
    QString extension = fileInfo.suffix().toLower();

    // 列出常见的文本文件扩展名
    static const QStringList textExtensions = {"ini"};

    return textExtensions.contains(extension);
}

void MainWindow::setUIIni(const QStringList keys, const QVariant value)
{
    QStandardItemModel *model = new QStandardItemModel(keys.size(), 2, this);
    for (int i = 0; i < keys.size(); i++)
    {
        QStandardItem *item = new QStandardItem(keys.at(i));
        model->setItem(i, 0, item);
    }
    for (int i = 0; i < QString(value.toByteArray()).size(); i++)
    {
        QStandardItem *item = new QStandardItem(QString(value.toByteArray()));
        model->setItem(i, 1, item);
    }
    ui->tableView_ini->setModel(model);

    // 隐藏行号和列号
    ui->tableView_ini->verticalHeader()->hide();
    ui->tableView_ini->horizontalHeader()->hide();
}

bool MainWindow::isSectionEmpty()
{
    if(ui->lineEdit_section->text().isEmpty())
        return true;
}

void MainWindow::matchData()
{
    connect(ui->pushButton_match, &QPushButton::clicked, this, [=](){
        //判断excel和ini选择没有
        if(!isFilesOpenEmpty())
        {
            dataHandle();
        }
        else
        {
            QMessageBox::warning(this,"警告","请选择excel和ini文件!!!");
        }
    });
}

bool MainWindow::isFilesOpenEmpty()
{
    if(!(isXlsxFile(filepathexcel)&&isIniFile(filepathini)))
    {
        return true;
    }
}

void MainWindow::dataHandle()
{
    QSettings settings(filepathini, QSettings::IniFormat);
    for (int i = 0; i < xls_data.count(); i++) {
        for (int j = 0; j < xls_data.at(i).count(); j++) {
            if(sectionKeys.contains(QString(xls_data.at(i).at(0).toByteArray())))
            {
                //找到key值,ini数据写入
                const QString sectionName = ui->lineEdit_section->text();

                settings.beginGroup(sectionName);
                // 定义要写入的键值对
                settings.setValue(QString(xls_data.at(i).at(0).toByteArray()), QString(xls_data.at(i).at(1).toByteArray()));

                settings.endGroup();

                // 同步到磁盘
                settings.sync();
            }
        }
    }
    QVariant valueIniMatch;
    foreach (const QString &key, settings.allKeys()) {
        valueIniMatch = settings.value(key);
    }

    //刷新页面
    brushUIIni();

    //成功提示
    QMessageBox::information(this,"success","success!!!");
}

void MainWindow::brushUIIni()
{
    // 使用QSettings读取INI文件
    QSettings settings(filepathini, QSettings::IniFormat);

    // 创建一个模型
    QStandardItemModel *model = new QStandardItemModel(0, 2, this); // 假设我们有两列
    model->setHorizontalHeaderItem(0, new QStandardItem("Key"));
    model->setHorizontalHeaderItem(1, new QStandardItem("Value"));

    settings.beginGroup(ui->lineEdit_section->text());
    // 遍历组内的键
    QStringList keys = settings.allKeys();
    for (const QString &key : keys) {
        // 添加行
        int row = model->rowCount();
        model->insertRow(row);
        model->setData(model->index(row, 0), key);
        model->setData(model->index(row, 1), settings.value(key));
    }
    settings.endGroup();

    // 将模型设置到TableView
    ui->tableView_ini->setModel(model);

    // 隐藏行号和列号
    ui->tableView_ini->verticalHeader()->hide();
    ui->tableView_ini->horizontalHeader()->hide();
}

二、视频

QQ202493-163449

ini和Excel文件的读取 c# 开发ini配置文件的常规读取和写入 Excel文件的读取 立即下载

相关推荐

c++提取EXCEL提取相关数据并保存为INI文本_EXCEL_INI_MFC

c++提取EXCEL提取相关数据并保存为INI文本

联为C#4——ini文件、excel操作

ini文件 写入数据: 在初始化中读入数据: 将功能封装成一个类: 用类的方式对ini文件进行读写: excel操作 创建工作簿 在引用中添加office16 创建对象: 每次操作完都会有excel的进程残留,要关闭进程,杀死进程。 添加工作表 用封装好的类对excel进行操作 ...

qq_42832272的博客 692

ESP32-S3驱动PCA9685模块:I2C扩展16路舵机控制实战指南

本文提供了ESP32-S3通过I2C总线驱动PCA9685模块扩展16路PWM输出的完整实战指南。详细解析了PCA9685模块原理、硬件连接、I2C地址配置,并给出了核心驱动代码与角度控制函数,帮助开发者解决微控制器PWM引脚不足的问题,轻松实现多路舵机控制。

weixin_32005771的博客 519

python对常用文件(CSV,Excel,json,ini,yaml文件)的一些操作

python文件操作open函数文件写入:文件读取csv 操作写入文件读取文件Excel文件解析写入Excel文件读取Excel文件json模块转换为字符串解析为Python格式写入json文件读取json文件ini 文件解析写入ini文件读取ini文件yaml文件解析数据写入文件文件读取 open函数 文件写入: with open('./data.txt',mode='a',encoding='utf8') as f: # 文件写入 f.write("helloworld123\n")

in546的博客 716

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2840

MacOS新手必看:HomeBrew安装避坑指南(含M1芯片适配方案)

本文为MacOS新手提供全面的HomeBrew安装指南,特别包含M1/M2芯片适配方案。从系统准备到核心安装流程,再到日常维护和高级配置,详细解析每个步骤的潜在问题及解决方案,帮助用户高效管理Mac软件。

weixin_28831399的博客 471

【WPS】表格使用VBA宏编程写入ini文件实现软件多语言

前言: 公司软件最近在做多语言版本,而又来一个西班牙文版本的,之前已经做过中文版本,英文版本和法文版本,之前是同事做的,现在安排我做,之前的做法,使用wps表格,翻译好,然后一个一个复制粘贴到ini文件里面,然后在软件里面读取。这种做法,后期维护起来挺麻烦的,所以自己研究了表格宏。之前也没接触过VB,所以只能自己网上学习 首先先下载VBA模块,下载链接VBA 7.0 首先学...

GreAmbWang的博客 3465

Swift Package Manager (SPM) 创建并集成本地库

Swift Package Manager (SPM) 在macOS 项目中创建并集成的完整步骤

征战无悔人生 1423

如何将excel列变为sql的in内容

在日常的数据库使用中,常会用到查询某个字段在指定列表的情况。以上就是今天要讲的内容,本文主要介绍将Excel列转换为sql在列表的查询条件。使用了第三方工具,想要了解此工具其他作用的可自行学习研究。...

qq_44699675的博客 2529

SNAP计算哨兵二号的叶面积指数(LAI)

对于哨兵二号数据以及LANDSAT8数据,SNAP提供已经集成好的模块计算LAI。在Optical->Thematic Land Processing->Biopyhsical Processor目录下面。 对于经过Sen2Cor处理好的数据,需经过重采样才可进行计算。重采样工具在Raster->Geometric->Resampling。 如果选择Biopyhsical Processor S2_10m进行计算,需要将所有的波段都重采样为10米(哨兵二号的第二波段为10米,可据此波

gxwwww的博客 9417

无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架

Solon 是新一代,Java 企业级应用开发框架。是杭州无耳科技有限公司的“根级”开源项目(最近“杭州六小龙”很火啊,我们也是杭州的哦)。从零开始构建(No Spring、No Java-EE、No Servlet),有灵活的接口规范与开放生态。采用对商用友好的 Apache 2.0 开源协议。

向往自由的少年!(我是一个少年!!!) 1698

基于MFC对Office Excel、INI文件的操作

/读取ini文件中Secton1节点下的Item1键下的键值,若不存在则给strINI1附一个空字符串,strINI最多读取和储存MAX_PATH个字符 6 GetPrivateProfileString(_T("Section1"), _T("Item2"), _T(""), strINI2.GetBuffer(MAX_PATH), MAX_PATH, strINIFilePath);

qq_53047220的博客 896

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

王老师青少年编程 791

Python对csv、ini、xml、excel等格式文件操作用例

在上述对文件的操作中,我们只使用了write和read来对文件进行读写,其实在文件操作中还有很多其他的功能来辅助实现更好的读写文件的内容。上文我们基于文件操作基本实现了读、写的功能,其中涉及的文件操作模式rt、rb、wt、wb,其实在文件操作中还有其他的很多模式。可表示文字信息,本质上是utf-8/gbk等编码的二进制(对unicode进行压缩,方便文件存储和网络传输。之前对文件进行操作时,每次都要打开和关闭文件,比较繁琐且容易忘记关闭文件。,是一种简单的数据存储语言,XML被设计用来传输和存储数据。...

Bruce_xiaowei的博客 3191

Unity 热更 之 【YooAsset 热更】几分钟快速了解 YooAsset [功能面板]、以及 [基础代码] 说明

Unity 的资源管理系统不断发展,以适应不同项目的需求和解决特定的问题。AssetBundle 和 Addressable Asset System 是 Unity 官方提供的资源管理解决方案,而 YooAsset 是第三方提供的资源管理系统。简化的API和易用性YooAsset 可能提供了更简单直观的 API,使得资源加载和管理更加容易。对于不熟悉 Addressable 或 AssetBundle 复杂配置的开发者来说,YooAsset 可能是一个更易于上手的选择。性能优化。

仙魁XAN 2956

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python的txt、csv、ini、xml、excel文件相关操作

python的txt、csv、ini、xml、excel文件相关操作 函数,一个用于专门实现某个功能的代码块(可重用) 内置函数 len、bin、oct、hex 等 自定义函数 # 定义了一个函数,功能代码块 def send_email(): # 写了10行代码,实现了发送邮件。 pass goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇

qq_37049812的博客 255

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python之加密、excel操作、ini文件操作、xml操作模块及数据格式分类

一、加密模块 1、有解密的加密方式(base64) #base64加密 import base64 str_encrypt = input("输入要加密的字符串:\n") base64_encrypt = base64.b64encode(str_encrypt.encode('utf-8')) print("BASE64加密串:\n"+str(base64_encrypt,'utf-8')...

贵有恒,何必三更眠五更起;最无益,只怕一日曝十日寒 1869

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Python基础】文件详解(文件基础、csv文件、时间处理、目录处理、excel文件、json&picke、ini配置文件)

json:一种轻量级的数据交换格式,文本序列化,具有一定的可读性;主要作用:网络数据传输,数据存储,交换等前端与后台请求数据格式;mysql中数据存储;分布式爬虫中,将数据保存到redis等;

你一定能够成为你想要去成为的人。 2252

python高级进阶【ini/yaml/excel文件处理、日志收集、操作mysql】

YAML 是一种灵活的数据格式,支持注释、换行符、多行字符串、裸字符等在自动化过程中,我们很多地方都需要使用配置文件来储存数据比如测试环 境,数据库信息、账号信息、日志格式、日志报告名称等。其中,yaml文件是最常用的配置文件类型之一,相比较ini,conf配置文件来说,它更加简洁,操作更加简单,同时还可以存放不同类型的数据。后缀名:.yaml .yml。

antyuki的博客 542

python文件类操作:json/ini配置文件、logging日志统计、excel表格数据读写、os操作库

该文章主要介绍各种文件的读写操作,主要包括json配置文件、ini配置文件、logging日志模块、表格数据操作、os操作等

weixin_46287157的博客 1214

【文件操作、目录操作】-覆盖:ini文件、yaml/yml文件、excel文件、json文件的python操作封装

【代码】关于:ini、yaml/yml、excel文件的python操作封装。

白骨梦儿 691

python3中配置文件ini的使用详解----读写、list&dict&path等变量----configparser

文章目录0.背景知识1.ini文件的格式2.ini文件读取方式3.通过ini文件的变量的path,读取excel文件4.ini文件的写入5.ini文件的解码 0.背景知识 背景知识: python3中,根据不同的工具或系统,见到过各种类型的配置文件,有json格式的、py格式的、ini格式的,yaml、txt、excel等等。但是,最常见的还是ini格式的配置文件。 为什么要用ini格式作为...

Alien-Hu 1万+

c#文件操作xml、ini、txt、excel、csv操作全解

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO; using System.Xml; using System.Data; using System.Runtime.Inte

3791

python 配置文件密文,python之加密、excel操作、ini文件操作、xml操作模块及数据格式分类...

一、加密模块1、有解密的加密方式(base64)#base64加密import base64str_encrypt = input("输入要加密的字符串:\n")base64_encrypt = base64.b64encode(str_encrypt.encode('utf-8'))print("BASE64加密串:\n"+str(base64_encrypt,'utf-8'))# 解密str_...

weixin_29419599的博客 709

【Python】基础学习&技能提升&代码样例4:常见配置文件和数据文件读写ini、yaml、csv、excel、xml、json

dyanconf的最大特点是用一套代码,从不同的配置数据存储方式中读取配置,例如。xml虽然常被用作配置文件,但他本身的设计是用来存储数据的。json 虽然也被用作配置文件,但更多情况是用来传递数据。具体用法参考上面第一个连接,这里不再赘述。不想展开讨论,以下仅列举可读取的方式连接。test1.yaml写入后如下。test2.yaml写入后如下。

Code_LT的博客 897
上一篇: QT中使用QAxObject类读取xlsx文件内容并显示在ui界面
PJ...
博客等级 码龄5年 412粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值