寒假已经过了100多天了,对于学生党,每天除了网课,还有一个必须要面对的就是疫情报告表的上交,每天的活动轨迹都在家里,天天重复填写,尤其对于手表的班委来说,需要耗费很大的人力,所以我昨天早上在想能不能做一个用代码自动生成每天疫情表。
摸索了一整天,终于给摸索出来了。
自动生成每天的疫情表无非以下几点:
- 修改表名称中的时间
- 表中内容复制昨天一行并修改日期
- 新表覆盖原表
按照上面的内容作为大致步骤,为大家介绍我是如何写的,我会分步骤贴上代码并解释,如果同学需要完整代码,可以到这里直接下载哦~
一、事前的准备
首先要把代码和同格式名称的表放在一个文件夹中
要看之前日期的单元格格式是否为日期,注意:我之前的格式是自定义,在这里要改过来
二、代码的编写
完成准备工作后,就要敲代码了
软件名称:spyder
(1)导入模块
import os #用于获取目录名
import xlrd #用于读取excel表
from xlutils.copy import copy # 复制原表格
from datetime import date #处理日期函数
(2)第二部分
root = "E:\Python_practice\疫情表\活动日志" #表格路径
dirs = os.listdir(root) #列出路径下的所有表格
dirs = dirs[1:7]
x = input('你想生成4月几日的疫情表:') #生成第几日的疫情表
代码解释:
dirs = dirs[1:7] 是因为我的文件目录下有7个文件:一个代码文件+6个表,所以要把第一行代码文件名去掉,这里可以根据你表的数量来修改数字7
(3)修改文件名称
这里我的表格名称格式为:“姓名+2020.3.24活动日志”
姓名可能是两个字或者三个字,但是日期和“活动日志”这些字符是不会变动的,所以可以利用列表反过来修改相应位置的字符
time = list(x) #修改文件名字中的时间
dirs_name=[i for i in range(6)] #初始化列表
for i in range(6):
dirs_name[i] = list(dirs[i])
dirs_name[i][-10:-8] = time
dirs_name[i] = "".join(dirs_name[i])
这里我是把要修改的时间以列表的形式来赋值,运行到这里dirs_name已经存好了新名字,dirs是原来的名字,
(4)对表格名称的处理
首先是借鉴了这位作者的博客,
→处理表格的参考博客←
因为预处理表格有关,需要安装一个包,打开cmd,输入这段代码即可下载
pip install xlutils
代码部分:
for m in range(6):
"""对excel进行操作"""
work = xlrd.open_workbook(dirs[m])
# 索引到第X个工作表
sheet = work.sheet_by_index(0)
#查看有多少行
#print(sheet.nrows)
#查看有多少列
#print(sheet.ncols)
#获取单元格内容
#print(sheet.cell_value(5,1))
a = list(i for i in range(6)) #初始化
for i in range(6):
a[i] = sheet.cell_value((sheet.nrows-3),i) #用变量a保存上一行数据
"""对excel进行修改/添加内容"""
# 对数据表格进行复制
old_content = copy(work)
# 定位到Sheet1表
ws = old_content.get_sheet(0)
#在sheet1表中写入内容
for i in range(6):
ws.write(sheet.nrows,i,a[i]) # 将上一行数据复制到此行
ws.write(sheet.nrows,0,'04/'+x) # 修改日期
#对修改后的内容进行保存
for i in range(sheet.nrows):
if (sheet.cell(i,0).ctype == 3):
date_value = xlrd.xldate_as_tuple(sheet.cell_value(i,0),work.datemode)
time = date(*date_value[:3]).strftime('%m/%d')
ws.write(i,0,time)
#对修改后的内容进行保存
old_content.save(dirs[m]) #注意要用原名称才能覆盖原表
os.rename(dirs[m],dirs_name[m]) #最后重命名即可
以上就是全部过程啦
看一看效果↓
修改前的表格:
一键修改后的表:
写到这里了,坐等大佬来光顾我的评论区
也欢迎大家来一起交流学习
转载:https://blog.csdn.net/weixin_44403922/article/details/105693672
查看评论