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

Python提取字符串日期 结合for循环if语句实现单元格范围筛选

实现步骤说明

你不需要全量遍历所有单元格范围再做判断,整体逻辑拆成3步即可,先修正你现有代码的2个基础问题:

  • 定义的weeks列表缺少闭合方括号]
  • 不要用range作为变量名,这是Python内置关键字,会引发命名冲突

1. 解析日期字符串提取关键信息

不需要引入第三方日期库,直接通过字符串拆分就能拿到需要的星期、日期号数信息:

date_of_report = "Wednesday, May 25, 2022"

# 按逗号拆分日期字符串
weekday_full, month_day, year = [seg.strip() for seg in date_of_report.split(",")]
# 提取星期缩写(和预定义days列表的key对齐,Wednesday取前3位即为Wed)
target_weekday = weekday_full[:3]
# 提取当月日期号数
month_name, day_num = month_day.split()
day_num = int(day_num)

2. 计算日期所属周次

你预定义的单元格范围每7天对应一个周块:1-7号为Week1、8-14号为Week2、15-21号为Week3、22号及之后为Week4,直接用整除计算即可:

# 补全你之前没写完的weeks列表
weeks = ["Week 1", "Week 2", "Week 3", "Week 4"]
# 计算周次索引,和weeks列表下标对齐
week_idx = (day_num - 1) // 7
target_week = weeks[week_idx]

以你给出的2022年5月25日为例:(25-1)//7 = 3,对应Week 4,星期匹配Wed,对应的目标单元格范围就是G57:G73。

3. 单元格匹配与赋值

高效写法(推荐)

不需要遍历所有周、所有星期的单元格范围,直接从映射表取目标范围操作即可,避免无意义的循环:

# 直接定位到目标单元格范围
target_cell_range = days_of_the_month_cells[target_week][target_weekday]

# 遍历范围写值
for row_idx, row in enumerate(ws[target_cell_range]):
    for cell in row:
        if row_idx == 0:
            cell.value = target_weekday
        # 其余行可按业务需求填充对应日期值

兼容原有遍历逻辑的写法

如果你要保留原来的四层遍历结构,if判断直接匹配当前遍历到的周次、星期是否和目标值一致即可:

for week_name, day_mapping in days_of_the_month_cells.items():
    for day_name, cell_range in day_mapping.items():
        for row_idx, row in enumerate(ws[cell_range]):
            for cell in row:
                if row_idx == 0:
                    # 周次、星期同时匹配时才赋值
                    if week_name == target_week and day_name == target_weekday:
                        cell.value = day_name

你预定义的months月份天数映射,仅在需要处理跨月日期、闰年2月天数计算的场景下才需要用到,当前单日期匹配周次的逻辑不需要调用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:00:58