【Python】实现excel文档中指定工作表数据的更新操作

news/2024/7/21 4:10:50 标签: python, 开发语言, excel

在做数值计算时,个人比较习惯利用excel文档的公式做数值计算进行对比,检查异常,虽然计算量大后,excel计算会比较缓慢,但设计简单,易排错

 但一般测试过程中使用到的数据都不是最终数值,会不停根据体验进行调整数值,导致计算表中使用到的数据需要时不时更新一次,为避免要用到的工作表过多不好手动复制,所以利用pandas和openpyxl写了个更新脚本,具体实现功能如下

假设数值计算需要使用A文档中的A1、A3、A4工作表,B文档中的B2、B4工作表

运行脚本后,

1.将数值计算文档中的A1、A3、A4、B2、B4复制表删除

2.重新到AB文档所在目录中找到AB文档

3.复制A1、A3、A4、B2、B4工作表内容

4.在数值计算文档中重新创建A1、A3、A4、B2、B4复制表并插入对应表内容

python">import pandas as pd
from openpyxl import load_workbook
import json
import os


# 更新计算文档数据
class update_calculate_excel:
    def __init__(self):
        # 读取json文件,获取数据表对应信息
        self.data_json = json.loads(open('read_data.txt', 'r', encoding='UTF-8').read())
        self.file_path = self.data_json['数据路径']
        self.excel_path = self.data_json['公式路径']
        self.sheet_name = self.data_json['sheet_name']

    # 更新工作表
    def update_sheet(self):
        # 读取需要更新的工作表
        for key in self.sheet_name:
            # 拼接Excel文件绝对路径
            read_excel_doc = self.file_path + "\\" + key + ".xlsx"
            # 判断文件是否存在,不存在则退出循环
            if not os.path.exists(read_excel_doc):
                print("------------------------------------------------")
                print(read_excel_doc, "文件不存在!!!!!", )
                print("------------------------------------------------")
                continue
            for sheet_name in self.sheet_name[key]:
                # 读取所需要复制的sheet工作表
                self.read_sheet(key, sheet_name)

    # 读取工作表内容并拷贝
    def read_sheet(self, excel_name, sheet_name):
        # 拼接Excel文件绝对路径
        read_excel_doc = self.file_path + "\\" + excel_name + ".xlsx"
        # 拼接公式文档中的工作表名称
        copy_sheet_name = "{}_{}".format(excel_name, sheet_name)
        try:
            raw_data = pd.read_excel(read_excel_doc, header=None, index_col=None, sheet_name=sheet_name)
            data = raw_data.values.tolist()
            self.write_calculation_excel(copy_sheet_name, data)
            print(copy_sheet_name, "复制完成")
        except ValueError:
            print("------------------------------------------------")
            print(copy_sheet_name, "不存在!")
            print("------------------------------------------------")
            return

    # 将更新过的配置文档重新写入公式表中,实现公式表数据更新
    def write_calculation_excel(self, sheet_name, data):
        # 读取Excel文件中的所有工作表
        calculation_excel_sheet = load_workbook(self.excel_path)

        # 判断公式文档是否存在工作表
        if sheet_name in calculation_excel_sheet.sheetnames:
            # 删除公式文档内原有的工作表
            calculation_excel_sheet.remove(calculation_excel_sheet[sheet_name])

        # 创建新的空白工作表,利于数据插入
        calculation_excel_sheet.create_sheet(sheet_name)

        for row in data:
            # 循环插入数据
            calculation_excel_sheet[sheet_name].append(row)

        # 保存文件
        calculation_excel_sheet.save(self.excel_path)


if __name__ == "__main__":
    json = update_calculate_excel()
    json.update_sheet()
read_data.txt内容为存放所需数据的json格式数据
python">{
	"数据路径": "D:\\xxx\\excel",
	"公式路径": "D:\\xxx\\数值计算.xlsx",
	"sheet_name": {
	        "Z_装备配置": ["kit_buff","kit"],
		    "Y_英雄配置": ["hero","hero_level","hero_star"],
		    "Z_专武配置": ["armscfg","arms_level","arms_star","arms_refine","arms_refines"]
		}
}

使用json格式数据是为了方便后续增加所需复制的工作表,也方便路径变更后可直接修改txt文件而非代码


http://www.niftyadmin.cn/n/5079703.html

相关文章

物料凭证过账时有用的BAdI和User exit

当用事务代码MIGO或者是MB01/MB1C/MB1A等进行物料凭证过账时,会有加入用户自检查,自定义自开发的需求。 本文将列举一些非常有用的BAdI和user-exit. 所有的BAdI定义可以通过事务代码SE18来查看。 BAdI(Business Add-Ins): 1. MB_MIGO_BAD…

关于Nacos启动报错 Unable to start embedded Tomcat

1 ,nacos 启动出错 Unable to start embedded Tomcat 版本Nacos 2.2.1 jdk 1.8 需 配置数据库连接 账号密码等信息,在导入Nacos数据; 最佳解决方案 https://blog.csdn.net/sinat_21843047/article/details/124165698 2,配置完成…

【RabbitMQ 实战】10 消息持久化和存储原理

一、持久化 1.1 持久化对象 rabbitmq的持久化分为三个部分: 交换器的持久化。队列的持久化。消息的持久化。 1.1.1 交换器持久化 交换器的持久化是通过在声明交换器时, 指定Durability参数为durable实现的。若交换器不设置持久化,在rabb…

C语言,求自幂数

自幂数是一个n位数的数等于自身各个位数上数字的n次幂指和。 水仙花数是三位自幂数。有些题目说输入100000以内的水仙花数,答案却有四位五位的数字,但是水仙花数是三位自幂数,四位自幂数叫四叶玫瑰数,五位是五角星数,…

Cmake 3.27.5 发布,开源构建系统

导读CMake 是一个跨平台的自动化构建系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或 Windows Visual C 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也…

Springboot使用sqlcipher4加密sqlite数据库

在有些业务场景,需要使用sqlite数据库,但sqlite数据库生的db文件,是明文的,该文件被别人拿到,就可以看到里面的所有数据,非常不安全,市面上有很多对sqlite数据库文件加密的方式,但都…

197、管理 RabbitMQ 的虚拟主机

开启Rabbitmq的一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件, 就是启动登录rabbitmq控制台的页面,rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器…

Dockerfile定制Ubuntu的docker镜像

当我们本地有一个从docker官网拉取的ubuntu:latest的Ubuntu镜像,我们基于这个镜像来定制一个自己的Ubuntu镜像 创建一个单独的文件夹create_docker 在这个文件夹下创建一个名为Dockerfile的文件:touch Dockerfile 将下面文件复制到Dockerfile文件中,可添加自己需要的安装指令…