最近負責公司某項目的日報,需要把五個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文件,在列寬的設置上也可以進一步改進。包括調整表頭字體和背影顏色也可以代碼實現,後續進一步優化,現在只是初步解決了業務需求。