Python操作Excel实现数据收集

1. 事情起源

疫情期间学校要求每天每个人都得上报自己的体温,每日两次。但是一个月要汇总一次,一张表格要核对自己一个月内填的数据,谁有那时间啊,所以想起了python自动化办公好像能办这个事。于是,开始了。。。。。。

2.选择合适的模块

  1. xlrd模块只能对数据进行读

  2. xlwt模块只能对数据进行写,且不能实现追加填写

  3. xlutils.copy能对数据进行复制,把 xlrd 对象转换成 xlwt 对象,就可以进行追加填写

  4. 以上三个模块只能操作后缀名为xls的excel文件

  5. 通过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. 构思

  1. 先从数据源获取你要保存的同学的名字,学号,分别存在两个列表中,最后保存的时候要用

  2. 再复制一个存放数据excel的模板

  3. 创建数据列表 循环遍历来获取 数据源 的数据

  4. 最后循环将列表的数据输出

  5. 保存每次编辑的结果

  6. 完成

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
 
 

 

 

posted @ 2020-05-27 21:35  Knot6777  阅读(184)  评论(0)    收藏  举报