背景
现在每个工作日需要复制各个线上平台的日销数据和推广费,简称为销售日报给老板。以前的模式是,把按照已经录入好公式的excel文件,复制粘贴,新建一个昨日日期的文件夹 和 重命名excel文件为 “销售日报——x月x日”。
虽然花不了什么时间,但是人总是想偷懒的。正好刚学了几天用python来编程,就想练练手嘻嘻(#。#)。如有不当之处,欢迎指正~(╹▽╹)
分解
需求:生成昨天日期的文件夹,并且生成 带昨日日期的销售日报,里面需要带有公式。
步骤分解:
1. 获取当前日期,并运算得到昨日日期; datetime;
2.生成昨日日期的文件夹; os ;
3.预处理excel表,预留某些数字为0的单元格,清除所有单元格的公式 ,设置单元格背景色; openpyxl;
4.保存excel文件到 第2步生成的文件夹中。openpyxl;
相关文档、教程
关于openpyxl库的使用方法已经有很多教程介绍过,
详细可以阅读openpyxl文档:openpyxl.readthedocs.io/en/default/
python 3 os 文件/目录方法:
http://www.runoob.com/python3/python3-os-file-methods.html
具体实现
- 准备销售日报模板,也就是程序需要操作的原始excel文件。
本例excel表格,如图所示:
2.程序源码
基于python 3
import datetime,os
#get datetime
yesterday= datetime.datetime.now() - datetime.timedelta(1)
strday = yesterday.strftime('%Y-%m-%d')
#create dirs
os.makedirs(strday, mode = 511,exist_ok = False)
#操作 excel
#经过尝试,os.open()方法不能直接打开excel,而openpyxl库中的方法可以,故这里操作excel使用了openpyxl库中方法。
import openpyxl
#Read workbook
wb = openpyxl.load_workbook('salestemplate.xlsx');
sheet = wb.get_sheet_by_name('Sheet1');
#表格中加入时间
sheet['A2']= '=TODAY()-1'
sheet['B2']= '=WEEKDAY(A2)'
#销售额合计
sheet['F4']= '=SUM(C4:C6)'
sheet['F7']= '=C7'
sheet['F8']= '=SUM(C8:C11)'
sheet['F12'] = '=SUM(C12:C18)'
sheet['F19'] ='=C19'
sheet['F20'] ='=SUM(C4:C19)-C14'
#广告费合计
sheet['G4'] = '=SUM(D4:D6)'
sheet['G7'] = '=D7'
sheet['G8'] = '=SUM(D8:D11)'
sheet['G12']= '=SUM(D12:D18)'
sheet['G19']= '=D19'
sheet['G20']='=SUM(D4:D19)'
#总体广告费比
#这里用for循环和list来写,代码更精简。
#为了看得清楚,还是使用了这种比较繁琐的方式。
sheet['H4'] = '=G4/F4'
sheet['H7'] = '=E7'
sheet['H8'] = '=G8/F8'
sheet['H12']= '=G12/F12'
sheet['H19']= '=G19/F19'
sheet['H20']= '=G20/F20'
#use for loop,
#计算广告费比
for i in range(4,11):
up = 'D'+str(i)
down = 'C'+str(i)
ratio = 'E'+str(i)
sheet[ratio] = '='+ up+'/'+ down
#因为行号为19,与以上行号不连续,所以把这个写在for循环外面。
sheet['E19'] = '=D19/C19'
xname ='销售日报--更新至'+ yesterday.strftime('%m.%d')+'.xlsx'
#保持到刚创造为昨日日期文件夹的路径
wb.save(os.path.join(strday,xname))
print('sucecced')
网友评论