利用 Python 生成并格式化含评分细则的 Excel 文件

引言

        在日常工作和学习中,我们常常需要创建具有特定格式的 Excel 文件来记录和评估各类数据。本文将详细介绍如何使用 Python 脚本生成一个包含评分细则的 Excel 文件,并对其进行精美的格式设置,使数据展示更加清晰、专业。我们将借助强大的pandas库来处理数据,以及openpyxl库来设置 Excel 文件的样式,同时通过优化代码结构,让整个脚本具有更高的可读性和维护性。

一、数据定义

首先,我们要明确评分细则的具体内容,通过定义一个字典data来存储相关信息。这个字典包含了六个关键的评估项目及其对应的评分细则、得分和权重。每个评估项目的初始评分为空值,而权重则根据项目的重要性合理分配了不同的百分比,具体数据如下:

data = {
    '评估项目': [
        '内容连贯性',
        '事实符合度',
        '语言表达流利度',
        '信息含量',
        '信息准确性',
        '对话吸引力'
    ],
    "评分细则": [
        "1分:内容完全无法理解,表达混乱;\n2分:内容较难理解,表达存在明显问题;\n3分:内容勉强能理解,表达存在一些问题;\n4分:内容容易理解,表达较为清晰;\n5分:内容清晰易懂,表达完美无瑕。",
        "1分:观点完全错误,毫无依据;\n2分:观点错误较多,依据不足;\n3分:观点部分正确,依据一般;\n4分:观点基本正确,依据充分;\n5分:观点完全正确,依据充分有力。",
        "1分:结构混乱,条理不清晰;\n2分:结构较乱,条理不够清晰;\n3分:结构尚可,条理较为清晰;\n4分:结构合理,条理清晰;\n5分:结构严谨,条理非常清晰。",
        "1分:创新性极低,毫无新意;\n2分:创新性较低,新意不足;\n3分:创新性一般,有一定新意;\n4分:创新性较高,新意较明显;\n5分:创新性极高,充满新意。",
        "1分:深度非常浅,分析肤浅;\n2分:深度较浅,分析不够深入;\n3分:深度一般,分析尚可;\n4分:深度较深,分析到位;\n5分:深度非常深,分析透彻。",
        "1分:实用性极低,无实际帮助;\n2分:实用性较低,帮助有限;\n3分:实用性一般,有一定帮助;\n4分:实用性较高,帮助较大;\n5分:实用性极高,极具参考价值。"
    ],
    '得分': [' '] * 6,
    '权重': ['20%', '20%', '15%', '20%', '15%', '10%']
}

二、创建 DataFrame

有了数据之后,我们将其转换为PandasDataFrame对象,这一步至关重要,因为它让我们能够以一种方便、高效的方式对数据进行各种操作,并为后续导出到 Excel 文件奠定基础。

import pandas as pd

df = pd.DataFrame(data)

三、导出到 Excel

使用Pandasto_excel方法,我们可以轻松地将DataFrame保存为 Excel 文件。在这里,我们指定了文件名为 “评分细则.xlsx”,并且通过设置index=False,避免将索引列写入文件,使文件内容更加简洁明了。

file_path = '评分细则.xlsx'
df.to_excel(file_path, index=False)

四、加载并设置格式

为了让 Excel 文件更加美观、易读,我们需要进一步对其进行格式调整,这部分工作将借助openpyxl库来完成。

(一)设置列宽

首先,我们定义一个字典column_widths来存储每一列所需的宽度,然后通过遍历该字典,使用ws.column_dimensions[col].width = width的方式来设置每列的宽度,使表格内容能够完整、清晰地展示。

from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment, Border, Side

wb = load_workbook(file_path)
ws = wb.active

column_widths = {'A': 20, 'B': 100, 'C': 10, 'D': 10, 'E': 10}
for col, width in column_widths.items():
    ws.column_dimensions[col].width = width

(二)定义字体和对齐方式

为了统一管理字体和对齐方式,我们分别创建了两个字典fontsalignmentsfonts字典存储了不同样式的字体,如标题字体、详情字体、得分字体、权重字体和项目字体等;alignments字典则存储了不同的对齐方式,包括标题对齐、详情对齐和默认对齐等,以便在后续的单元格格式设置中灵活调用。

fonts = {
    'title': Font(name='宋体', size=22, bold=True),
    'detail': Font(name='宋体', size=16),
    'score': Font(name='宋体', size=16, bold=True),
    'weight': Font(name='宋体', size=16),
    'project': Font(name='宋体', size=16, bold=True)
}

alignments = {
    'title': Alignment(horizontal='center', vertical='center'),
    'detail': Alignment(wrap_text=True, horizontal='center', vertical='center'),
    'default': Alignment(vertical='center', horizontal='center')
}

(三)辅助函数

为了避免代码重复,提高代码的可读性和可维护性,我们创建了一个辅助函数set_cell_format。这个函数接收一个单元格对象、字体键和对齐方式键作为参数,用于简化单元格格式的设置过程,使代码更加简洁、清晰。

def set_cell_format(cell, font_key, alignment_key=None):
    cell.font = fonts[font_key]
    if alignment_key:
        cell.alignment = alignments[alignment_key]

(四)应用格式

接下来,我们分别对标题、评分细则、得分和权重等各个部分应用相应的格式。通过调用辅助函数set_cell_format,我们可以以一种简洁明了的方式完成单元格格式的设置,使表格内容更加美观、专业。

# 应用标题格式
for cell in ws['1:1']:
    set_cell_format(cell, 'title')

# 应用评分细则格式
for row in range(2, 8):  # 行号从2开始,到7结束
    set_cell_format(ws.cell(row=row, column=2), 'detail', 'detail')
    set_cell_format(ws.cell(row=row, column=3), 'score')
    set_cell_format(ws.cell(row=row, column=4), 'weight', 'default')
    set_cell_format(ws.cell(row=row, column=1), 'project', 'default')

(五)设置边框

最后,我们为整个表格添加细边框,通过遍历表格的每一个单元格,并设置其边框样式为细边框,使表格看起来更加整洁美观、规范专业。

thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
for row in ws.iter_rows(min_row=1, max_row=7, min_col=1, max_col=5):
    for cell in row:
        cell.border = thin_border

(六)保存文件

完成所有格式设置后,我们使用wb.save(file_path)将更改保存回 Excel 文件,并打印出文件保存的路径,以便用户确认文件是否成功保存。

效果图

wb.save(file_path)
print(f"Excel文件已保存到 {file_path}")

五、总结

        通过本文介绍的 Python 脚本,我们可以轻松地生成并格式化一个包含评分细则的 Excel 文件。借助pandasopenpyxl库的强大功能,我们不仅能够高效地处理数据,还能灵活地控制输出文件的外观样式。此外,通过合理的代码组织和辅助函数的应用,显著提高了代码的可读性和维护性,使我们能够更加方便地对代码进行扩展和修改。

Author:余胜辉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值