【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复制表并插入对应表内容

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("------------------------------------------------")continuefor 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格式数据
{"数据路径": "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.rhkb.cn/news/153932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【chrome基础】Chrome、Chromium、libcef、electron版本关系大揭秘!

文章目录 概述chrome、Chromium、cef、electron 版本管理chrome的各种概念和学习资料V8 bindings 设计谷歌V8引擎探秘:基础概念Chrome 的插件(Plugin)与扩展(Extension)Chrome插件开发 概述 Chrome、Chromium、libcef、…

使用GitLab CI/CD 定时运行Playwright自动化测试用例

创建项目并上传到GitLab npm init playwright@latest test-playwright # 一路enter cd test-playwright # 运行测试用例 npx playwright test常用指令 # Runs the end-to-end tests. npx playwright test# Starts the interactive UI mode. npx playwright

Oracle 简介与 Docker Compose部署

最近,我翻阅了在之前公司工作时的笔记,偶然发现了一些有关数据库的记录。当初,我们的项目一开始采用的是 Oracle 数据库,但随着项目需求的变化,我们不得不转向使用 SQL Server。值得一提的是,公司之前采用的…

Servlet

Servlet Servlet是Java提供的一门动态web资源开发技术,其实就是一个接口(规范),将来我们需要自定义Servlet类实现Servlet接口即可,并由web服务器运行Servlet。 快速入门 创建Web项目,导入Servlet依赖坐标…

linux 安装下载conda并创建虚拟环境

目录 1. 下载安装2. 创建虚拟环境1. 下载安装 在window操作系统中下载anconda包,并通过scp传输到ubuntu操作系统 具体anconda包在如下界面: anconda包 目录 博主选择了最新的包:Anaconda3-2023.09-0-Linux-x86_64.sh 通过scp传输到ubuntu操作系统中: 并在ubuntu操作系…

8、Docker数据卷与数据卷容器

一、数据卷(Data Volumes) 为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷 是一个可供一个或多个容器使用的特殊目…

信息系统项目管理师第四版学习笔记——项目进度管理

项目进度管理过程 项目进度管理过程包括:规划进度管理、定义活动、排列活动顺序、估算活动持续时间、制订进度计划、控制进度。 规划进度管理 规划进度管理是为规划、编制、管理、执行和控制项目进度而制定政策、程序和文档的过程。本过程的主要作用是为如何在…

【17】c++设计模式——>原型模式

原型模式的定义 c中的原型模式(Prototype Pattern)是一种创建型设计模式,其目的是通过复制(克隆)已有对象来创建新的对象,而不需要显示的使用构造函数创建对象,原型模式适用于创建复杂对象时&a…

vue3+vite+ts中的@的配置

文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 我们是天生勇敢的开发者,我们创造bug,传播bug,毫不留情地消灭bug,在这个过程中我们创造了很多bug以供娱乐。 错误场景 vue3 vite ts 问题分析 在vue3的项目开发中我遇到了这样…

【Linux】 vi / vim 使用

天天用vim 或者vi 。看着大佬用的很6 。我们却用的很少。今天咱们一起系统学习一下。 vi / vim 发展史 vi 是一款由加州大学伯克利分校,Bill Joy研究开发的文本编辑器。 vim Vim是一个类似于Vi的高度可定制的文本编辑器,在Vi的基础上改进和增加了很多…

35.树与二叉树练习(1)(王道第5章综合练习)

【所用的树,队列,栈的基本操作详见上一节代码】 试题1(王道5.3.3节第3题): 编写后序遍历二叉树的非递归算法。 参考:34.二叉链树的C语言实现_北京地铁1号线的博客-CSDN博客https://blog.csdn.net/qq_547…

使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端&…

前端uniapp如何修改下拉框uni-data-select下面的uni-icons插件自带的图片【修改uniapp自带源码图片/图标】

目录 未改前图片未改前源码未改前通过top和bottom 和修改后图片转在线base64大功告成最后 未改前图片 未改前源码 然后注释掉插件带的代码,下面要的 未改前通过top和bottom 和修改后 找到uni-icons源码插件里面样式 图片转在线base64 地址 https://the-x.cn/b…

图像上传功能实现

一、后端 文件存放在images.path路径下 package com.like.common;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annot…

大数据编程实验3 熟悉常用的HBase操作前期准备

一、实验目的 (1)理解HDFS在Hadoop体系结构中的角色; (2)熟练使用HDFS操作常用的Shell命令; (3)熟悉HDFS操作常用的Java API。 二、实验平台 1. 操作系统:Linux&#x…

【JavaEE】多线程进阶(一)饿汉模式和懒汉模式

多线程进阶(一) 文章目录 多线程进阶(一)单例模式饿汉模式懒汉模式 本篇主要引入多线程进阶的单例模式,为后面的大冰山做铺垫 代码案例介绍 单例模式 非常经典的设计模式 啥是设计模式 设计模式好比象棋中的 “棋谱”…

springboot项目中后台文件上传处理

参考地址:http://www.gxcode.top/code 文件上次核心处理代码: @Autowired private FileUpload fileUpload; //获取资源对象:file-upload-prod.properties@ApiOperation(value = "用户头像修改", notes = "用户头像修改", httpMethod =

Mall脚手架总结(三) —— MongoDB存储浏览数据

前言 通过Elasticsearch整合章节的学习,我们了解SpringData框架以及相应的衍生查询的方式操作数据读写的语法。MongoDB的相关操作也同样是借助Spring Data框架,因此这篇文章的内容比较简单,重点还是弄清楚MongoDB的使用场景以及如何通过Sprin…

相机坐标系之间的转换

一、坐标系之间的转换 一个有4个坐标系:图像坐标系、像素坐标系、相机坐标系、世界坐标系。 1.图像坐标系和像素坐标系之间的转换 图像坐标系和像素坐标系在同一个平面,利用平面坐标系之间的转换关系可以之知道两个坐标系变换的公式,并且该…

JRebel在IDEA中实现热部署 (JRebel实用版)

JRebel简介: JRebel是与应用程序服务器集成的JVM Java代理,可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中,JRebel特别不依赖任何IDE或开发工具(除编译器外)。但是&…