Python使用设计模式中的建筑模式将数据写入Excel且满足条件内容标红

对于这个任务,适合使用"Builder"设计模式。Builder模式的主要目的是将对象的构建与其表示分离,以便相同的构建过程可以创建不同的表示。在这个情况下,我们需要一个构建器来逐行构建Excel表格,并根据给定的数据添加相应的统计结果。

下面是一个简单的示例,展示了如何使用Builder模式来实现这个功能:

python 复制代码
import pandas as pd

# 定义构建器类
class ExcelBuilder:
    def __init__(self, headers):
        self.headers = headers
        self.result_df = pd.DataFrame(columns=headers) # 定位DataFrame中下一个可用的行

    def add_row(self, data):
        self.result_df.loc[len(self.result_df)] = data

    def export_excel(self, filename):
        excel_writer = pd.ExcelWriter(filename, engine='xlsxwriter')
        self.result_df.to_excel(excel_writer, index=False, sheet_name='Sheet1')

        # 获取工作簿和工作表对象
        workbook = excel_writer.book
        worksheet = excel_writer.sheets['Sheet1']
        # 添加条件格式:将值大于25的单元格标红
        red_format = workbook.add_format({'bg_color': '#FFC7CE', 'font_color': '#9C0006'})
        worksheet.conditional_format('B2:D1000', {'type': 'cell', 'criteria': '>', 'value': 25, 'format': red_format})

        # excel_writer.save()
        excel_writer.close()
        print("Excel表格已生成")

# 使用构建器来构建Excel表格
headers = ['类别', '结果1', '结果2', '结果3']
excel_builder = ExcelBuilder(headers)

# 假设这是你的统计结果,以列表形式存储
statistics = [
    ['A', 10, 20, 30],
    ['B', 15, 25, 35],
    ['C', 20, 30, 40],
    ['D', 20, 30, "4a"]
]

# 逐行添加统计结果
for row in statistics:
    excel_builder.add_row(row)

# 导出Excel表格
excel_builder.export_excel('统计结果.xlsx')

运行结果

在这个示例中,我们首先定义了一个`ExcelBuilder`类,用于构建Excel表格。该类有三个方法:`init`用于初始化构建器,`add_row`用于逐行添加统计结果,`export_excel`用于将构建好的Excel表格导出到文件中。然后,我们使用构建器来创建Excel表格并逐行添加统计结果,最后导出到文件中。

复制代码
self.result_df = pd.DataFrame(columns=headers)这行代码是用于将数据逐行添加到DataFrame中的。让我一步一步解释:
  1. self.result_df 是一个DataFrame对象,它存储着我们的统计结果数据。

  2. len(self.result_df) 返回DataFrame中已有的行数。

  3. self.result_df.loc[len(self.result_df)] 是用来定位DataFrame中下一个可用的行,并将数据添加到这一行中。

  4. = data 则是将data变量中的数据赋值给这一行,这样就完成了一行数据的添加操作。

综合起来,这行代码的作用是将数据逐行添加到DataFrame中的下一个可用行中。

复制代码
worksheet.conditional_format('B2:D1000', {'type': 'cell', 'criteria': '>', 'value': 25, 'format': red_format})这行代码是用来设置 Excel 工作表中的条件格式的。让我解释一下参数的含义:
  • 'B2:D1000':这是条件格式应用的范围。它指定了要应用条件格式的单元格范围,从 B2 到 D1000。
  • {'type': 'cell', 'criteria': '>', 'value': 25, 'format': red_format}:这是条件格式的规则。具体含义如下:
    • 'type': 'cell':指定条件格式的类型为单元格。
    • 'criteria': '>':指定条件为大于。这意味着我们希望对满足大于某个值的单元格应用条件格式。
    • 'value': 25:这是条件的值。在本例中,条件是大于25的单元格将被标红。
    • 'format': red_format:这是应用的格式。red_format 是之前定义的红色格式,它指定了标红的背景色和字体颜色。

因此,这行代码的作用是将范围内数值大于25的单元格标记为红色。

相关推荐
dhxhsgrx11 分钟前
PYTHON训练营DAY25
java·开发语言·python
伊织code2 小时前
PyTorch API 5 - 全分片数据并行、流水线并行、概率分布
pytorch·python·ai·api·-·5
风逸hhh3 小时前
python打卡day25@浙大疏锦行
开发语言·python
刚入门的大一新生3 小时前
C++初阶-string类的模拟实现与改进
开发语言·c++
魔尔助理顾问4 小时前
Flask如何读取配置信息
python·flask·bootstrap
chxii4 小时前
5java集合框架
java·开发语言
老衲有点帅4 小时前
C#多线程Thread
开发语言·c#
C++ 老炮儿的技术栈4 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
jc_hook5 小时前
Python 接入DeepSeek
python·大模型·deepseek