Python脚本生成24×32日历矩阵Excel时遇单元格覆盖错误求助
解决Excel单元格覆盖问题并生成正确的24×32矩阵
首先,咱们来拆解你遇到的问题:你看到的Attempt to overwrite cell错误,核心原因是循环逻辑没有正确移动列指针,所有月份都被写入了同一列(第0列),重复写入导致冲突。另外还有两个小问题:日期里的月份数字用了循环索引(会变成0-11,不符合1-12的要求),以及空白列的逻辑完全没生效。
下面是修正后的完整代码,我会一步步解释改动点:
import xlwt def write_to_excel(): months = {"JANUARY": 31, "FEBRUARY": 29, "MARCH": 31, "APRIL": 30, "MAY": 31, "JUNE": 30, "JULY": 31, "AUGUST": 31, "SEPTEMBER": 30, "OCTOBER": 31, "NOVEMBER": 30, "DECEMBER": 31} # 创建工作簿和工作表 workbook = xlwt.Workbook() sheet = workbook.add_sheet("Sheet 1") # 遍历每个月份,同时获取索引、名称和天数 for month_index, (month_name, days) in enumerate(months.items()): # 计算当前月份的列:每个月份占偶数列(0,2,4...),中间奇数列留空 current_col = month_index * 2 # 写入月份名称到第0行的当前列 sheet.write(0, current_col, month_name) # 写入日期:从第1行到第days行(对应1号到当月最后一天) for day in range(1, days + 1): # 日期格式:日/月/2020,月份用index+1(因为索引从0开始) date_str = f"{day}/{month_index + 1}/2020" sheet.write(day, current_col, date_str) # 保存工作簿 workbook.save("month_calendar.xls") # 调用函数生成文件 write_to_excel()
关键改动说明:
- 列指针正确移动:用
month_index * 2计算当前月份的列位置,每个月份占用偶数列(0、2、4...),相邻的奇数列自动留空,完美实现你要的"12个月份+每个月后的空白列"的24列结构。 - 修正月份数字:用
month_index + 1代替原来的循环索引,确保日期里的月份是1-12(比如JANUARY对应1,FEBRUARY对应2)。 - 循环逻辑重构:直接遍历
months.items(),同时拿到月份名称和天数,避免了原来通过[*months.keys()][month]这种不直观且容易出错的取值方式。 - 移除无效逻辑:删掉了原来那个只执行一次的
if column % 2 == 0判断,换成了随循环自动计算列位置的逻辑,彻底解决了单元格覆盖问题。
运行这个代码后,你会得到一个符合要求的Excel文件:
- 第0行是12个月份名称,每个名称之间隔一个空白列
- 每个月份列的下方,会从第1行开始写入1到当月天数的日期,格式为
日/月/2020 - 总共24列(12个月份列+12个空白列),32行(第0行是月份,1-31行是日期)
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

