StyleFrame:轻松打造精美Excel报表的Python利器

StyleFrame:轻松打造精美Excel报表的Python利器

StyleFrame A library that wraps pandas and openpyxl and allows easy styling of dataframes in excel StyleFrame 项目地址: https://gitcode.com/gh_mirrors/st/StyleFrame

项目介绍

在数据分析和报告生成过程中,Excel文件因其直观性和广泛的使用基础,成为了许多人的首选输出格式。然而,手动调整Excel文件的样式和格式不仅耗时,还容易出错。为了解决这一问题,StyleFrame应运而生。StyleFrame是一个强大的Python库,它结合了pandasopenpyxl的优点,使得用户能够轻松地将DataFrame数据导出为样式丰富的Excel文件。

项目技术分析

StyleFrame的核心功能是通过封装pandasDataFrame对象,并结合openpyxl库来实现Excel文件的样式定制。它提供了丰富的API,允许用户对Excel文件的各个方面进行精细控制,包括单元格样式、列宽、行高、数字格式、日期格式等。此外,StyleFrame还支持命令行接口,使得用户可以通过简单的命令行操作来生成Excel文件。

项目及技术应用场景

StyleFrame适用于各种需要将数据导出为Excel文件的场景,尤其是在以下情况下表现尤为出色:

  1. 数据分析报告:数据分析师可以使用StyleFrame快速生成带有精美样式的Excel报告,提升报告的专业性和可读性。
  2. 自动化报表生成:企业可以通过StyleFrame自动化生成各种财务报表、销售报表等,减少手动操作的时间和错误率。
  3. 数据可视化:虽然StyleFrame主要用于生成Excel文件,但它也可以与其他数据可视化工具结合使用,生成更加丰富的数据展示。

项目特点

  1. 易用性StyleFrame提供了与pandas类似的API,用户可以轻松上手,无需深入了解Excel文件的底层结构。
  2. 灵活性:用户可以对Excel文件的各个方面进行定制,包括单元格样式、列宽、行高、数字格式、日期格式等。
  3. 高效性:通过自动化样式设置,StyleFrame大大减少了手动调整Excel文件样式的时间,提高了工作效率。
  4. 开源性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绝对值得一试!

StyleFrame A library that wraps pandas and openpyxl and allows easy styling of dataframes in excel StyleFrame 项目地址: https://gitcode.com/gh_mirrors/st/StyleFrame

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平樱玫Duncan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值