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

    1. import pandas as pd
    2. from openpyxl import load_workbook
    3. import json
    4. import os
    5. # 更新计算文档数据
    6. class update_calculate_excel:
    7. def __init__(self):
    8. # 读取json文件,获取数据表对应信息
    9. self.data_json = json.loads(open('read_data.txt', 'r', encoding='UTF-8').read())
    10. self.file_path = self.data_json['数据路径']
    11. self.excel_path = self.data_json['公式路径']
    12. self.sheet_name = self.data_json['sheet_name']
    13. # 更新工作表
    14. def update_sheet(self):
    15. # 读取需要更新的工作表
    16. for key in self.sheet_name:
    17. # 拼接Excel文件绝对路径
    18. read_excel_doc = self.file_path + "\\" + key + ".xlsx"
    19. # 判断文件是否存在,不存在则退出循环
    20. if not os.path.exists(read_excel_doc):
    21. print("------------------------------------------------")
    22. print(read_excel_doc, "文件不存在!!!!!", )
    23. print("------------------------------------------------")
    24. continue
    25. for sheet_name in self.sheet_name[key]:
    26. # 读取所需要复制的sheet工作表
    27. self.read_sheet(key, sheet_name)
    28. # 读取工作表内容并拷贝
    29. def read_sheet(self, excel_name, sheet_name):
    30. # 拼接Excel文件绝对路径
    31. read_excel_doc = self.file_path + "\\" + excel_name + ".xlsx"
    32. # 拼接公式文档中的工作表名称
    33. copy_sheet_name = "{}_{}".format(excel_name, sheet_name)
    34. try:
    35. raw_data = pd.read_excel(read_excel_doc, header=None, index_col=None, sheet_name=sheet_name)
    36. data = raw_data.values.tolist()
    37. self.write_calculation_excel(copy_sheet_name, data)
    38. print(copy_sheet_name, "复制完成")
    39. except ValueError:
    40. print("------------------------------------------------")
    41. print(copy_sheet_name, "不存在!")
    42. print("------------------------------------------------")
    43. return
    44. # 将更新过的配置文档重新写入公式表中,实现公式表数据更新
    45. def write_calculation_excel(self, sheet_name, data):
    46. # 读取Excel文件中的所有工作表
    47. calculation_excel_sheet = load_workbook(self.excel_path)
    48. # 判断公式文档是否存在工作表
    49. if sheet_name in calculation_excel_sheet.sheetnames:
    50. # 删除公式文档内原有的工作表
    51. calculation_excel_sheet.remove(calculation_excel_sheet[sheet_name])
    52. # 创建新的空白工作表,利于数据插入
    53. calculation_excel_sheet.create_sheet(sheet_name)
    54. for row in data:
    55. # 循环插入数据
    56. calculation_excel_sheet[sheet_name].append(row)
    57. # 保存文件
    58. calculation_excel_sheet.save(self.excel_path)
    59. if __name__ == "__main__":
    60. json = update_calculate_excel()
    61. json.update_sheet()
    read_data.txt内容为存放所需数据的json格式数据
    1. {
    2. "数据路径": "D:\\xxx\\excel",
    3. "公式路径": "D:\\xxx\\数值计算.xlsx",
    4. "sheet_name": {
    5. "Z_装备配置": ["kit_buff","kit"],
    6. "Y_英雄配置": ["hero","hero_level","hero_star"],
    7. "Z_专武配置": ["armscfg","arms_level","arms_star","arms_refine","arms_refines"]
    8. }
    9. }

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

  • 相关阅读:
    k8s搭建EFK日志系统
    Docker和容器化:简介和使用案例
    Linux动静态库
    C++ Reference: Standard C++ Library reference: C Library: cwchar: vswprintf
    Python基础(七):条件语句深入了解
    MySQL使用C语言链接
    Linux下虚拟网卡的基本命令
    计算机毕业设计JavaWeb企业客户管理系统(源码+系统+mysql数据库+lw文档)
    JavaDemo——设置控制台输出字符颜色和格式
    AI智能剪辑,仅需2秒一键提取精彩片段
  • 原文地址:https://blog.csdn.net/qq_40878316/article/details/133755319