文章目录
目录
- 技术选型
- 核心思路
- 效果图
calendar模块:Python 内置模块,用于获取每个月的天数和日期,不用自己计算平年闰年。
openpyxl库:用于创建和编辑 Excel 文件,支持合并单元格、设置样式等操作,生成的文件可直接在 WPS/Excel 中打开。
calendar模块:Python 内置模块,用于获取每个月的天数和日期,不用自己计算平年闰年。openpyxl库:用于创建和编辑 Excel 文件,支持合并单元格、设置样式等操作,生成的文件可直接在 WPS/Excel 中打开。
- 动态列宽:每个月的标题合并列数等于该月的实际天数(如 1 月 31 列、2 月 28 列),彻底解决空白单元格问题。
- 严格对齐:标题和日期的起始列完全一致,保证视觉上严丝合缝。
- 样式统一:设置统一的字体和对齐方式,让生成的日历更美观专业。
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月 | ||||||||||||||||||||||||||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | ||||
| 登录功能 | 项目经理 | 小强 | 0 | |||||||||||||||||||||||||||||||
| 产品经理 | 小明 | 1 | 1 | |||||||||||||||||||||||||||||||
| 开发 | 小龙 | 1 | 1 | |||||||||||||||||||||||||||||||
| 测试 | 小王 | 0.3 | 0.3 | |||||||||||||||||||||||||||||||
| 注册功能 | 项目经理 | 小强 | 0 | |||||||||||||||||||||||||||||||
| 产品经理 | 小明 | 0 | ||||||||||||||||||||||||||||||||
| 开发 | 小龙 | 0 | ||||||||||||||||||||||||||||||||
| 测试 | 小王 | 0 | ||||||||||||||||||||||||||||||||
| 注销功能 | 项目经理 | 小强 | 0 | |||||||||||||||||||||||||||||||
| 产品经理 | 小明 | 0 | ||||||||||||||||||||||||||||||||
| 开发 | 小龙 | 0 | ||||||||||||||||||||||||||||||||
| 测试 | 小王 | 0 | ||||||||||||||||||||||||||||||||
到此这篇关于基于Python生成横向年度日历的代码实现的文章就介绍到这了,更多相关Python生成横向年度日历内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python一键生成核酸检测日历的操作代码
- 利用Python自动化生成爱豆日历详解
- 用python自动生成日历
- python生成日历实例解析