StyleFrame:轻松打造精美Excel报表的Python利器
项目介绍
在数据分析和报告生成过程中,Excel文件因其直观性和广泛的使用基础,成为了许多人的首选输出格式。然而,手动调整Excel文件的样式和格式不仅耗时,还容易出错。为了解决这一问题,StyleFrame
应运而生。StyleFrame
是一个强大的Python库,它结合了pandas
和openpyxl
的优点,使得用户能够轻松地将DataFrame
数据导出为样式丰富的Excel文件。
项目技术分析
StyleFrame
的核心功能是通过封装pandas
的DataFrame
对象,并结合openpyxl
库来实现Excel文件的样式定制。它提供了丰富的API,允许用户对Excel文件的各个方面进行精细控制,包括单元格样式、列宽、行高、数字格式、日期格式等。此外,StyleFrame
还支持命令行接口,使得用户可以通过简单的命令行操作来生成Excel文件。
项目及技术应用场景
StyleFrame
适用于各种需要将数据导出为Excel文件的场景,尤其是在以下情况下表现尤为出色:
- 数据分析报告:数据分析师可以使用
StyleFrame
快速生成带有精美样式的Excel报告,提升报告的专业性和可读性。 - 自动化报表生成:企业可以通过
StyleFrame
自动化生成各种财务报表、销售报表等,减少手动操作的时间和错误率。 - 数据可视化:虽然
StyleFrame
主要用于生成Excel文件,但它也可以与其他数据可视化工具结合使用,生成更加丰富的数据展示。
项目特点
- 易用性:
StyleFrame
提供了与pandas
类似的API,用户可以轻松上手,无需深入了解Excel文件的底层结构。 - 灵活性:用户可以对Excel文件的各个方面进行定制,包括单元格样式、列宽、行高、数字格式、日期格式等。
- 高效性:通过自动化样式设置,
StyleFrame
大大减少了手动调整Excel文件样式的时间,提高了工作效率。 - 开源性:
StyleFrame
是一个开源项目,用户可以自由使用、修改和分发,同时也可以通过贡献代码来改进项目。
使用示例
简单示例
以下是一个简单的示例,展示了如何使用StyleFrame
将一个DataFrame
导出为带有样式的Excel文件:
import pandas as pd
from styleframe import StyleFrame, Styler, utils
df = pd.DataFrame({
'Time': [1.496728e+09, 1.496728e+09, 1.496728e+09, 1.496728e+09, 1.496728e+09],
'Expect': ['Hey', 'how', 'are', 'you', 'today?'],
'Actual': ['Hello', 'how', 'are', 'u', 'today?'],
'Pass/Fail': ['Failed', 'Passed', 'Passed', 'Failed', 'Passed']
}, columns=['Time', 'Expect', 'Actual', 'Pass/Fail'])
default_style = Styler(font=utils.fonts.aharoni, font_size=14)
sf = StyleFrame(df, styler_obj=default_style)
header_style = Styler(bold=True, font_size=18)
sf.apply_headers_style(styler_obj=header_style)
passed_style = Styler(bg_color=utils.colors.green, font_color=utils.colors.white)
sf.apply_style_by_indexes(indexes_to_style=sf[sf['Pass/Fail'] == 'Passed'],
cols_to_style='Pass/Fail',
styler_obj=passed_style,
overwrite_default_style=False)
failed_style = Styler(bg_color=utils.colors.red, font_color=utils.colors.white)
sf.apply_style_by_indexes(indexes_to_style=sf[sf['Pass/Fail'] == 'Failed'],
cols_to_style='Pass/Fail',
styler_obj=failed_style,
overwrite_default_style=False)
sf.set_column_width(columns=sf.columns, width=20)
sf.set_row_height(rows=sf.row_indexes, height=25)
writer = sf.to_excel('output.xlsx', row_to_add_filters=0, columns_and_rows_to_freeze='A2')
writer.close()
进阶示例
以下是一个进阶示例,展示了如何使用StyleFrame
生成一个更加复杂的Excel文件:
from datetime import date
import pandas as pd
from styleframe import StyleFrame, Styler, utils
columns = ['Date', 'Col A', 'Col B', 'Col C', 'Percentage']
df = pd.DataFrame(data={'Date': [date(1995, 9, 5), date(1947, 11, 29), date(2000, 1, 15)],
'Col A': [1, 2004, -3],
'Col B': [15, 3, 116],
'Col C': [33, -6, 9],
'Percentage': [0.113, 0.504, 0.005]},
columns=columns)
only_values_df = df[columns[1:-1]]
rows_max_value = only_values_df.idxmax(axis=1)
df['Sum'] = only_values_df.sum(axis=1)
df['Mean'] = only_values_df.mean(axis=1)
sf = StyleFrame(df)
sf.set_column_width_dict(col_width_dict={
('Col A', 'Col B', 'Col C'): 15.3,
('Sum', 'Mean'): 30,
('Percentage', ): 12
})
all_rows = sf.row_indexes
sf.set_row_height_dict(row_height_dict={
all_rows[0]: 45,
all_rows[1:]: 25
})
sf.apply_column_style(cols_to_style='Date',
styler_obj=Styler(date_format=utils.number_formats.date,
font=utils.fonts.calibri,
bold=True))
sf.apply_column_style(cols_to_style='Percentage',
styler_obj=Styler(number_format=utils.number_formats.percent))
sf.apply_column_style(cols_to_style=['Col A', 'Col B', 'Col C'],
styler_obj=Styler(number_format=utils.number_formats.thousands_comma_sep))
style = Styler(bg_color=utils.colors.red,
bold=True,
font_color=utils.colors.white,
protection=True,
underline=utils.underline.double,
number_format=utils.number_formats.thousands_comma_sep).to_openpyxl_style()
for row_index, col_name in rows_max_value.iteritems():
sf[col_name][row_index].style = style
sf.apply_column_style(cols_to_style=['Sum', 'Mean'],
style_header=True,
styler_obj=Styler(font_color='#40B5BF',
font_size=18,
bold=True))
sf.apply_style_by_indexes(indexes_to_style=sf[sf['Date'] > date(2000, 1, 14)],
cols_to_style='Date',
styler_obj=Styler(bg_color=utils.colors.green,
date_format=utils.number_formats.date,
bold=True))
ew = StyleFrame.ExcelWriter('sf tutorial.xlsx')
sf.to_excel(excel_writer=ew,
sheet_name='1',
right_to_left=False,
columns_and_rows_to_freeze='B2',
row_to_add_filters=0,
allow_protection=True)
other_sheet_sf = StyleFrame({'Dates': [date(2016, 10, 20), date(2016, 10, 21), date(2016, 10, 22)]},
styler_obj=Styler(date_format=utils.number_formats.date))
ew.save()
通过以上示例,我们可以看到StyleFrame
的强大功能和灵活性。无论是简单的样式设置,还是复杂的Excel文件生成,StyleFrame
都能轻松应对。如果你正在寻找一个能够快速生成精美Excel报表的工具,StyleFrame
绝对值得一试!