|从Excel中解救你!如何用Python实现报表自动化( 二 )


这一步是在做什么:
· 创建一个文件路径变量 , 以确定要将文件存储在何处 ,
· 使用ExcelWriter保存文件
· 将两个透视表保存到单独的工作表中 , 从第3行开始(稍后从中保留以用于页眉)
使报表更漂亮
Pandas有助于将数据导入到Excel中 。 既然数据已经导入Excel , 不妨将其美化一下 , 来添加一些可视化效果 。
#Section 05 - Loading the Workbook wb =load_workbook(file_path) sheet1= wb['Quarterly Sales'] # Section 06 - Formatting the First Sheet sheet1['A1'] ='Quarterly Sales' sheet1['A2'] ='datagy.io' sheet1['A4'] ='Quarter' sheet1['A1'].style ='Title' sheet1['A2'].style ='Headline 2' for i inrange(5, 9): sheet1[f'B{i}'].style='Currency' sheet1[f'C{i}'].style='Currency' sheet1[f'D{i}'].style='Currency' # Section 07 - Adding a Bar Chart bar_chart=BarChart() data=http://news.hoteastday.com/a/Reference(sheet1, min_col=2, max_col=4, min_row=4, max_row=8) categories=Reference(sheet1, min_col=1, max_col=1, min_row=5, max_row=8) bar_chart.add_data(data, titles_from_data=True) bar_chart.set_categories(categories) sheet1.add_chart(bar_chart,''F4'') bar_chart.title ='Sales by Type' bar_chart.style=3 wb.save(filename = file_path)
在Section 5中 , 将工作簿和工作表加载到Openpyxl可以处理的单独对象中 。
而Section 6中操作更多:
· 在表一的A1和A2单元格中添加标题和副标题 。
· 更改“quarters”列的标题 , 使其更能反映数据 。
· 对标题和副标题应用样式 。
· 将金融领域的单元格转换为货币 。 这需要对每单个单元格进行单独处理 。 因此使用了for循环 。
在Section 7中 , 添加了条形图:
· 创建一个条形图对象 , 并识别存储数据和类别的字段 。
· 随后将数据和类别应用于对象 。
· 最后 , 添加描述性标题和样式 。 使用许多不同的样式都试试!
这就是工作簿现在的样子:

|从Excel中解救你!如何用Python实现报表自动化
本文插图

所得工作簿之一 | 图源: Nik Piepenbreier
对多个工作簿执行工作流自动化
虽然已经很方便了 , 但是仅在一个区域执行这样的操作只能节约一点点的时间 。 我们可使用for循环 , 对所有的区域执行此操作 。
#Section 08 - Getting Region Names regions =list(df['Region'].unique()) # Section 09 - Looping Over All Regions folder_path=#Insert the path to the folder you want tosave the reports in for region in regions: filtered =df[df['Region'] ==f'{region}'] quarterly_sales = pd.pivot_table(filtered, index =filtered['Date'].dt.quarter, columns ='Type', values ='Sales', aggfunc='sum') file_path =f''{path to your folder}{region}.xlsx'' quarterly_sales.to_excel(file_path,sheet_name ='QuarterlySales', startrow=3) wb =load_workbook(file_path) sheet1 = wb['Quarterly Sales'] sheet1['A1'] ='Quarterly Sales' sheet1['A2'] ='datagy.io' sheet1['A4'] ='Quarter' sheet1['A1'].style ='Title' sheet1['A2'].style='Headline 2' for i inrange(5, 10): sheet1[f'B{i}'].style='Currency' sheet1[f'C{i}'].style='Currency' sheet1[f'D{i}'].style='Currency' bar_chart =BarChart() data =http://news.hoteastday.com/a/Reference(sheet1, min_col=2, max_col=4, min_row=4, max_row=8) categories =Reference(sheet1, min_col=1, max_col=1, min_row=5, max_row=8) bar_chart.add_data(data,titles_from_data=True) bar_chart.set_categories(categories) sheet1.add_chart(bar_chart,''F4'') bar_chart.title='Sales by Type' bar_chart.style =3


推荐阅读