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  
	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:  # 每列遍历
	if ws.cell(column=column_index_from_string('H'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名1', chidao)
	if ws.cell(column=column_index_from_string('I'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名2', yanzhong)
	if ws.cell(column=column_index_from_string('J'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名3', kuanggong_c)
	if ws.cell(column=column_index_from_string('K'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名4', zaotui)
	if ws.cell(column=column_index_from_string('L'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名5', shangban)
	if ws.cell(column=column_index_from_string('M'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名6', xiaban)
	if ws.cell(column=column_index_from_string('N'), row=row).value != 0:
		resdata.setdefault(name, {})
		resdata[name].setdefault('键名7', kuanggong)
	if ws.cell(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' :  
					ws.cell(row=rowNum, column=column_index_from_string('S')).value = v1
				if k1 == '请假2' :
					ws.cell(row=rowNum, column=column_index_from_string('T')).value = v1
				if k1 == '请假3':
					ws.cell(row=rowNum, column=column_index_from_string('AF')).value = v1

				if k1 == '请假4' : 
					ws.cell(row=rowNum, column=column_index_from_string('AK')).value = v1

				if k1 == '请假5':
					ws.cell(row=rowNum, column=column_index_from_string('AE')).value = v1

3、写入文件之后记得保存,可以结合自己的实际情况,写一写提示信息,这样用户的友好性就会更好

wb.save(filename=r'存放路径\导出结果.xlsx')

有数据的,直接会写入相对应的单元格,没有数据则为空
在这里插入图片描述
在这里插入图片描述
之后再需要整理数据的时候,点点鼠标运行一下程序直接搞定!

该文章仅用于学习交流,转载请注明出处,谢谢!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值