You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Openpyxl将日期列表内容设为新建工作表标题的问题咨询

问题根因
  • 嵌套循环逻辑错误:外层每次新建工作表后,内层都会遍历全部日期反复修改当前工作表名称,最终所有工作表都会被设置为dates列表的最后一个日期
  • 日期列表长度和工作表复制数量未做匹配校验,容易触发索引异常
修复后可直接运行的代码
from openpyxl import load_workbook
from datetime import datetime, timedelta

wb = load_workbook('C:/Users/Me/Desktop/Python/Excel/Roster.xlsx')

start="24-10-2021"    
last="02-01-2022"  
start_date=datetime.strptime(start,"%d-%m-%Y")  
last_date=datetime.strptime(last,"%d-%m-%Y")  
dates=[]  
# 生成周期间隔的日期列表
while start_date <= (last_date - timedelta(days=7)):  
    start_date += timedelta(days=7)  
    dates.append(start_date.strftime("%d-%m-%Y"))

original_ws = wb.active
# 优先使用日期列表的长度作为要创建的工作表数量,避免数量不匹配
num_of_required_sheet_copies = len(dates)

for n in range(num_of_required_sheet_copies):
    # 创建工作表副本
    ws = wb.copy_worksheet(original_ws)
    # 直接取对应索引的日期作为工作表名,去掉多余的内层遍历循环
    ws.title = dates[n]

wb.save('C:/Users/Me/Desktop/Python/Excel/New.xlsx')
核心修改说明
  • 删除了内层遍历dates的冗余循环,改用外层循环的索引直接取对应位置的日期赋值给工作表标题,保证每个工作表对应唯一日期
  • 将固定的工作表复制数量改为动态取dates列表长度,避免手动设置的数量和生成的日期数量不匹配导致的异常
  • 如果确实需要固定创建10个工作表,可以保留原来的num_of_required_sheet_copies = 10设置,同时增加边界判断避免索引越界,比如赋值前加判断if n < len(dates),多余的工作表可以自定义命名规则

内容的提问来源于stack exchange,提问作者Python_User_27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:24:02