python汇总钉钉数据,写⼊excel⽂件保存提⾼⼯作效率
使⽤python去处理excel⽂件实战案例
之后的⽂章会陆续出关于python和MySQL数据库的实战⼩案例
⼀、读取原始数据,整理之后写⼊专门的python⽂件
1、第⼀步⼀定是要导⼊模块了,那么这个例⼦⽤的是openpyxl的模块,实际上也有其他的模块⽤来处理excel⽂件
import openpyxl
import pprint
from openpyxl.utils import column_index_from_string
openpyxl主要操作数据库,pprint⽤于写⼊⽂件,column_index_from_string顾名思义,⽤来处理excel⽂件当中列的内容
2、因为从软件⽣成的数据⽂档中有⼀定的格式,我们可以直接按照⽣成的数据⽂档中的格式进⾏代码的
编写
openpyxl.load_workbook()# 该⽅法⽤来加载⼯作簿,括号⾥⾯的参数是⽂件名称
3、加载好excel⽂件之后,选择要处理的sheet,选择好要读取的信息,从哪列到哪列(或从哪⾏到哪⾏)
ws = wb['⽉度汇总']# 我以⽉度汇总的sheet为例
col_range = ws['H:AG']
4、选择好了区域之后,准备开始按⾏读取,简单点就⽤for循环就可以,但是时间复杂度是在O(n^2)的,后期⽂章再做优化。获取⽂档中的姓名、各种类型的假,上班迟到早退情况
# 在遍历的时候要注意range函数的stop含义,因此到最后⼀⾏的时候要+1.
#附上python的解释
'''
class range(object)
|  range(stop) -> range object
|  range(start, stop[, step]) -> range object
|
|  Return an object that produces a sequence of integers from start (inclusive)
|  to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
|  start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
|  These are exactly the valid indices for a list of 4 elements.
|  When step is given, it specifies the increment (or decrement).
'''
5、在该sheet下,通过表单名字[‘单元格索引’].value的格式获取相应单元格内的数据
for row in range(5, ws.max_row +1):# 按⾏遍历
name = ws['A'+str(row)].value
shi_data = ws['Q'+str(row)].value
chan_data = ws['R'+str(row)].value
chanjian_data = ws['S'+str(row)].value
si_data = ws['T'+str(row)].value
year = ws['U'+str(row)].value
teshugongzuo = ws['V'+str(row)].value
bing_data = ws['W'+str(row)].value
tiaoxiu = ws['X'+str(row)].value
peichan = ws['Y'+str(row)].value
gong = ws['Z'+str(row)].value
python怎么读取excel文件数据
xiu = ws['AA'+str(row)].value
jie = ws['AB'+str(row)].value
chidao = ws['H'+str(row)].value
yanzhong = ws['I'+str(row)].value
kuanggong_c = ws['J'+str(row)].value
zaotui = ws['K'+str(row)].value
shangban = ws['L'+str(row)].value
xiaban = ws['M'+str(row)].value
kuanggong = ws['N'+str(row)].value
6、⾏数范围确定好之后,确定列数范围,数据还是存储到字典当中⽅便读取。
每个⼈都不只有⼀种假,所以不能⽤多重分⽀
使⽤column_index_from_string()⽅法将列数转换为具体数字
使⽤setdefault⽅法创建字典并存储,原理相同,因此展⽰⼀部分代码
为了⽅便数据的整理,可以适当进⾏强转
resdata ={}
for col in col_range:# 每列遍历
ll(column=column_index_from_string('H'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名1', chidao)
ll(column=column_index_from_string('I'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名2', yanzhong)
ll(column=column_index_from_string('J'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名3', kuanggong_c)
ll(column=column_index_from_string('K'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名4', zaotui)
ll(column=column_index_from_string('L'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名5', shangban)
ll(column=column_index_from_string('M'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名6', xiaban)
ll(column=column_index_from_string('N'), row=row).value !=0:
resdata.setdefault(name,{})
resdata[name].setdefault('键名7', kuanggong)
ll(column=column_index_from_string('R'), row=row).value is not None:
resdata.setdefault(name,{})
resdata[name].setdefault('键名8',float(shi_data))
另外补充⼀下关于字典的setdefault⽅法:
setdefault()⽅法体当中有两个参数,第⼀个参数key是设置字典的键名,第⼆个参数⽤来设置默认值
# 举个例⼦
data ={}
data.setdefault('name','abc')
print(data)
data.setdefault('age',10)
print(data)
如果想要某⼀个键的值依旧被设置为字典,可以参考如下例⼦:
直接将对应键的值设置成空字典
data.setdefault('info',{})
data['info'].setdefault('gender','male')
print(data)
这样的话,可以不断的丰富字典结构,程序也能适应更多类型的数据存储
数据内容存放搞定之后,就可以写⼊⽂件了,如果使⽤open⽅法打开⽂件,那记得要close掉,建议使⽤with open
print('读取结束,开始写⼊...')
response =open(r'绝对路径\res.py','w', encoding='utf-8')
response.write('allData='+ pprint.pformat(resdata))
print('写⼊结束')
response.close()
在指定位置产⽣存放数据的python⽂件
⼆、从存放数据的python⽂件当中获取数据直接写⼊excel⽂档
1、因为⽤使⽤单独python⽂件,所以⼀定要提前导⼊,两个⽂件放在同⼀路径下
import res
import openpyxl
from openpyxl.utils import column_index_from_string
2、如果有要求的格式⽂件,可以使⽤openpyxl的load_workbook⽅法打开,并指定操作的sheet
写⼊⽂件之前可以先⽤pycharm的插件分析分析结构,帮助我们更好捋清楚思路
wb = openpyxl.load_workbook(r'绝对路径\⽂件名称.xlsx')
ws = wb['Sheet1']# 取出表单
for rowNum in range(5, ws.max_row +1):
name = ws.cell(row=rowNum, column=column_index_from_string('E')).value
for k, v in res.allData.items():# ⼀级字典
if name == k:
for k1, v1 in v.items():# ⼆级字典
if k1 =='请假1':
if k1 =='请假2':
if k1 =='请假3':
if k1 =='请假4':
if k1 =='请假5':
3、写⼊⽂件之后记得保存,可以结合⾃⼰的实际情况,写⼀写提⽰信息,这样⽤户的友好性就会更好wb.save(filename=r'存放路径\导出结果.xlsx')
有数据的,直接会写⼊相对应的单元格,没有数据则为空
之后再需要整理数据的时候,点点⿏标运⾏⼀下程序直接搞定!该⽂章仅⽤于学习交流,转载请注明出处,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。