最近负责公司某项目的日报,需要把五个CSV文件合并到一个Execl中并进行一些格式修改。每天做重复的工作很浪费时间精力。所谓人生苦短,我用Python,那么就用Python来做一个自动化报表吧。
首先要处理CSV文件和EXCEL文件的读取写入,调用pandas库。我总结了一下,使用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('写入成功')
写入成功
输出的表格样式如下(数据为虚拟值),列宽是固定的,保留位数也不一致。与需要的样式严重不符
因此需要修改表格样式。 调用
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('写入成功')
因为处理量还不大,在EXCEL中对使用宏完成调整字体和背影颜色。最终效果如下(数据为虚拟值)
代码可以进一步优化,使用For循环就不需要写5行读入CSV文件,在列宽的设置上也可以进一步改进。包括调整表头字体和背影颜色也可以代码实现,后续进一步优化,现在只是初步解决了业务需求。