背景需求
今天下发通知
三个园区的保健老师需要填写
1.2023学年(202406)的六一体检数据
2.2024学年(202409)的新生入园体检数据
我先把上一轮填写过的数据模版下载下来(套用模版)
把EXCEL下载到原始文件夹里
模版下载完成,
我想到去年2023年9月用这些前年2022年9月的模版发给保健老师后,保健老师们更改2023年最新数据发回给我,但他们忘记修改文件名上的年份数字2022和标题里的年份数字2022,最后反复传了几次(更改数据和年份为2023)才正确。
所以本次我用程序,直接把文件名上的年份数字+1,把每个工作表的第一行的标题里面的年份数字+1。
代码展示:
'''
9月园园通幼儿健康数据上报 EXCEL模版的年份变更(作为模版发给保健老师更新数据)
星火讯飞,阿夏
2024年9月12日
'''
import os
import re
import openpyxl
import shutil
def replace_text_in_excel(file_path, old_text, new_text):
wb = openpyxl.load_workbook(file_path)
for sheet in wb:
for row in sheet.iter_rows():
for cell in row:
if isinstance(cell.value, str) and old_text in cell.value:
cell.value = cell.value.replace(old_text, new_text)
wb.save(file_path)
def process_files(src_folder, dst_folder):
if not os.path.exists(dst_folder):
os.makedirs(dst_folder)
for file_name in os.listdir(src_folder):
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
src_file_path = os.path.join(src_folder, file_name)
dst_file_path = os.path.join(dst_folder, file_name)
# 创建一个新的副本
new_file_path = os.path.join(dst_folder, 'temp_' + file_name)
shutil.copy2(src_file_path, new_file_path)
if '2023' in file_name:
new_file_name = file_name.replace('2023', '2024')
dst_file_path = os.path.join(dst_folder, new_file_name)
replace_text_in_excel(new_file_path, '2023', '2024')
elif '2022' in file_name:
new_file_name = file_name.replace('2022', '2023')
dst_file_path = os.path.join(dst_folder, new_file_name)
replace_text_in_excel(new_file_path, '2022', '2023')
# 删除临时副本
os.remove(new_file_path)
# 调用函数,传入源文件夹和目标文件夹路径
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\健康数据上报'
src_folder = path+r'\01原始'
dst_folder =path+r'\02新的'
os.makedirs(dst_folder,exist_ok=True)
process_files(src_folder, dst_folder)