Python操作Excel实现数据收集
1. 事情起源
疫情期间学校要求每天每个人都得上报自己的体温,每日两次。但是一个月要汇总一次,一张表格要核对自己一个月内填的数据,谁有那时间啊,所以想起了python自动化办公好像能办这个事。于是,开始了。。。。。。
2.选择合适的模块
-
xlrd模块只能对数据进行读
-
xlwt模块只能对数据进行写,且不能实现追加填写
-
xlutils.copy能对数据进行复制,把 xlrd 对象转换成 xlwt 对象,就可以进行追加填写
-
以上三个模块只能操作后缀名为xls的excel文件
-
通过openpyxl模块可以简单的实现追写功能
3.先要了解可能用到的方法
-
!````wb1 = openpyxl.load_workbook() 加载一个已有的excel文件
-
wb2 = openpyxl.workbook 新建一个excel文件
-
wb2 = wb2 复制原先的excel文件
-
sn = wb2.sheetnames 获取已加载的excel文件的表格名字集合,返回一个列表
-
sheet = wb2[sn[0]] 打开要操作的表单 sn[0]就是第一张表单
-
sheet.cell(row,column).value = data data为你要添加的数据,此方法不能操作合并单元格,否则会报错
-
当然也可以用 sheet.cell(row,column).value 来查看 表单(row,column)坐标的数据
-
wb2.save() 括号里放你要保存的地址
4. 构思
-
先从数据源获取你要保存的同学的名字,学号,分别存在两个列表中,最后保存的时候要用
-
再复制一个存放数据excel的模板
-
创建数据列表 循环遍历来获取 数据源 的数据
-
最后循环将列表的数据输出
-
保存每次编辑的结果
-
完成
5. 代码实现
import openpyxl
import os
# 获取学号和姓名列表
numList = []
for num in range(1,45):
if num>=0 and num<= 9:
numList.append('0'+str(num)) #强制类型转化为str
else:
numList.append(str(num))
nameList = []
namerow = 5
WB = openpyxl.load_workbook(r"D:\Desk\E_T\04.27~05.20\04.27 19级防控新冠状病毒学生晨午检记录表.xlsx") #随便一张表,记录下姓名
Names = WB.sheetnames
WStemp = WB[Names[0]]
for namerow in range(5,49):
nameList.append(WStemp.cell(namerow,2).value) #获取姓名列表
i = 0
for personNum in range(5,49): #开始循环获取输入44位同学的数据
beginRow = 34 #开始行
overRow = 38 #结束行的后一行
wb1 = openpyxl.load_workbook(r"D:\\DESK\4月- 副本.xlsx") #先加载源文件 模板
wb2 = openpyxl.Workbook
wb2 = wb1
nameSheets = wb2.sheetnames #获取wb1的全部表格
ws = wb2[nameSheets[0]] #创建表ws
fileList = os.listdir(r"D:\Desk\E_T\04.27~05.20")
dataList1 = []
for file in fileList:
wb3 = openpyxl.load_workbook(r"D:\Desk\E_T\04.27~05.20\\"+file)
names = wb3.sheetnames
wstemp = wb3[names[0]]
dataList1.append(wstemp.cell(personNum,6).value) #(5,6) 为一天当中第一次 数据的坐标
dataList2 = []
for file in fileList:
wb3 = openpyxl.load_workbook(r"D:\Desk\E_T\04.27~05.20\\"+file)
names = wb3.sheetnames
wstemp = wb3[names[0]]
dataList2.append(wstemp.cell(personNum,9).value) #(5,9) 为一天当中第一次 数据的坐标
count =0
for row in range(beginRow,overRow):
ws.cell(row,3).value = dataList1[count]
ws.cell(row,4).value = dataList2[count]
count = count+1
for row in range(beginRow,overRow):
ws.cell(row,5).value = '否'
ws.cell(row,6).value = '否'
wb2.save(r"D:\Desk\全班报表\\"+str(numList[i])+str(nameList[i])+".xlsx")
print("写入第"+str(numList[i])+"完成且成功")
i=i+1

浙公网安备 33010602011771号