Python實現日報自動化

最近負責公司某項目的日報,需要把五個CSV文件合併到一個Execl中並進行一些格式修改。每天做重複的工作很浪費時間精力。所謂人生苦短,我用Python,那麼就用Python來做一個自動化報表吧。
首先要處理CSV文件和EXCEL文件的讀取寫入,調用pandas庫。我總結了一下,使用pandas庫修改CSV和EXCEL文件的套路

1. pandas庫處理CSV和EXCEL文件的套路

import pandas as pd
df=pd.read_csv('CSV文件的本地地址')
writer=pd.ExcelWriter('要保存EXCEL文件的本地地址',engine='xlsxwriter')
df1.to_excel(writer,sheet_name='sheet1name ',index=False)
writer.save()
writer.close()
print('寫入成功')              

按照這個套路我寫了自己需要的Python把五個CSV文件合併到一個Execl中的代碼

#日報自動化
import pandas as pd

n='20200406' #日期
df1=pd.read_csv('E:/NetEase/DailyReport/'+n+'/1.csv')
df2=pd.read_csv('E:/NetEase/DailyReport/'+n+'/2.csv')
df3=pd.read_csv('E:/NetEase/DailyReport/'+n+'/3.csv')
df4=pd.read_csv('E:/NetEase/DailyReport/'+n+'/4.csv')
df5=pd.read_csv('E:/NetEase/DailyReport/'+n+'/5.csv')
writer=pd.ExcelWriter('E:/NetEase/DailyReport/'+n+'/'+n+'.xlsx',engine='xlsxwriter')
df1.to_excel(writer,sheet_name='召回源 ',index=False) #index=False表示不需要加索引列,根據自己需要修改
df2.to_excel(writer,sheet_name='召回源-品牌',index=False)
df3.to_excel(writer,sheet_name='top20文章',index=False)
df4.to_excel(writer,sheet_name='一二級分類曝光量',index=False)
df5.to_excel(writer,sheet_name='按刷數前5刷',index=False)

writer.save()
writer.close()
print('寫入成功')

寫入成功

輸出的表格樣式如下(數據爲虛擬值),列寬是固定的,保留位數也不一致。與需要的樣式嚴重不符
在這裏插入圖片描述

2. 設置表格列寬

因此需要修改表格樣式。 調用

import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None

即自定義格式,再設置每個表的列寬。完整代碼如下

import pandas as pd
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None

n='20200408' #日報的日期

df1=pd.read_csv('E:/NetEase/DailyReport/'+n+'/1.csv')
df2=pd.read_csv('E:/NetEase/DailyReport/'+n+'/2.csv')
df3=pd.read_csv('E:/NetEase/DailyReport/'+n+'/3.csv')
df4=pd.read_csv('E:/NetEase/DailyReport/'+n+'/4.csv')
df5=pd.read_csv('E:/NetEase/DailyReport/'+n+'/5.csv')
writer=pd.ExcelWriter('E:/NetEase/DailyReport/'+n+'/'+'【新用戶召回源日報】-'+n+'.xlsx',engine='xlsxwriter')
df1.to_excel(writer,sheet_name='召回源 ',index=False)
df2.to_excel(writer,sheet_name='召回源-品牌',index=False)
df3.to_excel(writer,sheet_name='top20文章',index=False)
df4.to_excel(writer,sheet_name='一二級分類曝光量',index=False)
df5.to_excel(writer,sheet_name='按刷數前5刷',index=False)
#Sheet1設置行寬
worksheets = writer.sheets
worksheet1 = worksheets['召回源 ']
worksheet1.set_column('A:A',12)
worksheet1.set_column('B:B',6)
worksheet1.set_column('C:C',16)
worksheet1.set_column('D:G',9)
worksheet1.set_column('H:J',20)
#Sheet2設置行寬
worksheet2 = worksheets['召回源-品牌']
worksheet2.set_column('A:A',12)
worksheet2.set_column('B:C',6)
worksheet2.set_column('D:D',16)
worksheet2.set_column('E:H',9)
worksheet2.set_column('I:K',20)
#Sheet3設置行寬
worksheet3 = worksheets['top20文章']
worksheet3.set_column('A:A',12)
worksheet3.set_column('B:B',6)
worksheet3.set_column('C:C',8)
worksheet3.set_column('D:D',18)
worksheet3.set_column('E:H',9)
worksheet3.set_column('I:I',20)
#Sheet4設置行寬                      
worksheet4 = worksheets['一二級分類曝光量']
worksheet4.set_column('A:A',12)
worksheet4.set_column('B:B',16)
worksheet4.set_column('C:F',9)
worksheet4.set_column('G:I',20)
#Sheet5設置行寬  
worksheet5 = worksheets['按刷數前5刷']
worksheet5.set_column('A:A',12)
worksheet5.set_column('B:B',6)
worksheet5.set_column('C:C',16)
worksheet5.set_column('D:G',9)
worksheet5.set_column('H:J',20)

writer.save()
print('寫入成功')

現在結果如下圖,列寬都被調整好了(數據爲虛擬值)
在這裏插入圖片描述

3.調整表頭字體和背影顏色

因爲處理量還不大,在EXCEL中對使用宏完成調整字體和背影顏色。最終效果如下(數據爲虛擬值)
在這裏插入圖片描述

後記

代碼可以進一步優化,使用For循環就不需要寫5行讀入CSV文件,在列寬的設置上也可以進一步改進。包括調整表頭字體和背影顏色也可以代碼實現,後續進一步優化,現在只是初步解決了業務需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章