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

如何用Python Openpyxl提取单元格'/'后日期写入H列并解决报错

报错根因
  • 索引起始值错误:openpyxl的行、列序号均从1开始计数,原有代码用range(len(ws['A']))生成行号,第一个迭代值为0,调用ws.cell(row=0, column=1)时就会抛出参数不合法的错误。
  • 正则逻辑失效:原有正则表达式存在大量多余空格、分隔符匹配规则混乱,就算索引正确也无法正确提取完整日期,仅能捕获日期的日段内容。
实现方案

你提到的「提取'/'后10个字符作为目标值」的逻辑实现简单、运行效率高,只要A列数据格式固定(/后紧跟10位标准日期),完全可以满足需求,参考代码如下:

from openpyxl import load_workbook

# 替换为本地Excel文件的实际路径
wb = load_workbook(r'你的文件路径.xlsx')
ws = wb.active

# 行号从1开始遍历,覆盖A列所有有数据的行
for row_num in range(1, len(ws['A']) + 1):
    a_val = ws.cell(row=row_num, column=1).value
    # 跳过A列空单元格
    if not a_val:
        continue
    a_str = str(a_val)
    # 定位/的位置,截取后面10位内容写入H列
    if '/' in a_str:
        target_date = a_str.split('/')[-1][:10]
        ws.cell(row=row_num, column=8, value=target_date)

# 保存为新文件,避免覆盖原文件导致数据丢失
wb.save(r'处理完成_输出文件.xlsx')

如果需要对提取的内容做日期格式校验,可以把截取逻辑替换为正则匹配版本,替换对应判断段即可:

import re
# 替换上述代码中if '/' in a_str: 对应的判断逻辑
match_res = re.search(r'\d{4}[-./]\d{1,2}[-./]\d{1,2}', a_str.split('/')[-1])
if match_res:
    ws.cell(row=row_num, column=8, value=match_res.group())
注意点
  • 代码里的文件路径替换为本地实际路径,保存时建议用新文件名,不要直接覆盖原文件。
  • 代码对A列值做了字符串转换,兼容A列是数值、时间等非字符串类型的单元格场景,不会抛出类型错误。
  • 如果A列单元格存在多个/的情况,split('/')[-1]会取最后一个/后面的内容,符合常规数据存储的格式逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:48:24