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

作者: 林喵miao | 来源:发表于2017-10-01 16:48 被阅读426次

    背景


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

        本文链接:https://www.haomeiwen.com/subject/wbxwextx.html