繁琐工作半自动化:用Python openpyxl库自动生成销售日报

背景


现在每个工作日需要复制各个线上平台的日销数据和推广费,简称为销售日报给老板。以前的模式是,把按照已经录入好公式的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

具体实现


  1. 准备销售日报模板,也就是程序需要操作的原始excel文件。
    本例excel表格,如图所示:
繁琐工作半自动化:用Python openpyxl库自动生成销售日报_第1张图片
销售日报模板.png

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')

你可能感兴趣的:(繁琐工作半自动化:用Python openpyxl库自动生成销售日报)