基于Python生成横向年度日历的代码实现

 更新时间:2026年01月28日 09:05:36   作者:U盘失踪了  
文章介绍了使用Python的calendar模块和openpyxl库生成Excel日历的方法,并描述了如何实现动态列宽、严格对齐和样式统一,以生成美观专业的日历,需要的朋友可以参考下

技术选型

  • calendar模块:Python 内置模块,用于获取每个月的天数和日期,不用自己计算平年闰年。
  • openpyxl库:用于创建和编辑 Excel 文件,支持合并单元格、设置样式等操作,生成的文件可直接在 WPS/Excel 中打开。

核心思路

  1. 动态列宽:每个月的标题合并列数等于该月的实际天数(如 1 月 31 列、2 月 28 列),彻底解决空白单元格问题。
  2. 严格对齐:标题和日期的起始列完全一致,保证视觉上严丝合缝。
  3. 样式统一:设置统一的字体和对齐方式,让生成的日历更美观专业。
import calendar
from openpyxl import Workbook
from openpyxl.styles import Alignment, Font
from openpyxl.utils import get_column_letter

def generate_aligned_calendar(target_year):
    """
    生成标题与日期严格对齐的横向年度日历
    核心修复:每个月标题合并的列数 = 该月实际天数,无空白单元格
    """
    wb = Workbook()
    ws = wb.active
    ws.title = f"{target_year}年日历"

    # 定义样式
    title_font = Font(bold=True, size=12)
    title_align = Alignment(horizontal='center', vertical='center')
    date_align = Alignment(horizontal='right', vertical='center')

    current_col = 1  # 记录当前起始列,动态累加

    for month in range(1, 13):
        # 获取当前月份的实际天数(关键:用实际天数代替固定31)
        days_in_month = calendar.monthrange(target_year, month)[1]
        end_col = current_col + days_in_month - 1

        # 1. 写入并合并月份标题(合并列数 = 该月天数)
        month_title = f"{month}月"
        ws.merge_cells(start_row=1, start_column=current_col,
                       end_row=1, end_column=end_col)
        title_cell = ws.cell(row=1, column=current_col, value=month_title)
        title_cell.font = title_font
        title_cell.alignment = title_align

        # 2. 写入日期(从当前列开始,连续写入1-月末)
        for day in range(1, days_in_month + 1):
            date_cell = ws.cell(row=2, column=current_col + day - 1, value=day)
            date_cell.alignment = date_align

        # 更新下一个月的起始列
        current_col = end_col + 1

    # 统一调整列宽
    for col in range(1, current_col):
        ws.column_dimensions[get_column_letter(col)].width = 2.5

    # 保存文件
    file_name = f"{target_year}年对齐版日历.xlsx"
    wb.save(file_name)
    print(f"✅ {target_year}年日历生成成功!文件:{file_name}")
    print(f"📌 修复效果:标题与日期严格对齐,无空白单元格")

# 调用示例:生成2026年日历
if __name__ == "__main__":
    generate_aligned_calendar(2026)

效果图

需求角色人员工时1月
12345678910111213141516171819202122232425262728293031
登录功能项目经理小强0
产品经理小明11
开发小龙11
测试小王0.30.3
注册功能项目经理小强0
产品经理小明0
开发小龙0
测试小王0
注销功能项目经理小强0
产品经理小明0
开发小龙0
测试小王0

到此这篇关于基于Python生成横向年度日历的代码实现的文章就介绍到这了,更多相关Python生成横向年度日历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python+Tkinter开发一个表格比对和&整理工具

    基于Python+Tkinter开发一个表格比对和&整理工具

    日常办公和数据处理中,Excel表格是高频使用的工具,本文将使用Python和Tkinter开发一个表格比对和&整理工具,感兴趣的小伙伴可以了解下
    2025-12-12
  • Python中的魔法方法__repr__和__str__用法实例详解

    Python中的魔法方法__repr__和__str__用法实例详解

    这篇文章主要介绍了Python中的__repr__和__str__方法,它们分别用于提供对象的官方字符串表示和用户友好的字符串表示,通过重写这两个方法,可以自定义对象的打印输出,文中通过代码将用法介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Python自动化办公之邮件发送全过程详解

    Python自动化办公之邮件发送全过程详解

    这篇文章主要介绍了Python自动化办公之邮件发送全过程详解,使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时,下面我们就来看看具体的操作配置吧
    2022-01-01
  • Python安装本地.whl文件的流程及注意事项

    Python安装本地.whl文件的流程及注意事项

    在Python的生态环境中.whl文件是一种预编译的二进制包,用于分发和安装Python库,这篇文章主要给大家介绍了关于Python安装本地.whl文件的流程及注意事项,文中讲解了下载文件、安装pip、使用pip安装whl文件、验证安装以及注意事项,需要的朋友可以参考下
    2024-11-11
  • 基于Python编写一个简单的http服务器

    基于Python编写一个简单的http服务器

    这篇文章主要为大家详细介绍了如何基于Python编写一个简单的http服务器,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • Pytorch实现将模型的所有参数的梯度清0

    Pytorch实现将模型的所有参数的梯度清0

    这篇文章主要介绍了Pytorch实现将模型的所有参数的梯度清0,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 一文解析Python FastAPI进行异常处理的详细方法

    一文解析Python FastAPI进行异常处理的详细方法

    这篇文章主要为大家详细介绍了Python FastAPI中HTTPException、WebSocketException等常见异常的捕获与处理技巧,涵盖从基础配置到全局异常处理器的完整实践,感兴趣的小伙伴可以了解下
    2026-01-01
  • 一文了解Python中NotImplementedError的作用

    一文了解Python中NotImplementedError的作用

    NotImplementedError是一个内置异常类,本文主要介绍了一文了解Python中NotImplementedError的作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • python使用tkinter实现简单计算器

    python使用tkinter实现简单计算器

    这篇文章主要为大家详细介绍了python使用tkinter实现简单计算器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 如何在python中处理配置文件代码实例

    如何在python中处理配置文件代码实例

    这篇文章主要介绍了如何在python中处理配置文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论