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

使用openpyxl通过表头设置Excel日期格式及批量处理问题

解决方法

首先修正表头到列字母的映射逻辑,之前的错误在于把列索引(数字)存在字典里,但单元格引用需要的是列字母(如A、B、C)。然后针对多个日期列批量处理:

步骤1:正确构建表头与列字母的映射

用openpyxl.utils.get_column_letter把列索引转成字母,确保字典里存的是可直接用于单元格引用的列标识:

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

workbook = load_workbook('path\\filename.xlsx')
worksheet = workbook['Sheet1']

# 构建表头到列字母的映射
col_name_to_letter = {}
for col_idx, col in enumerate(worksheet.iter_cols(min_row=1, max_row=1), start=1):
    header_value = col[0].value
    if header_value:
        col_name_to_letter[header_value] = get_column_letter(col_idx)

步骤2:批量处理日期列格式

遍历你的DateColumns列表,对每个列的所有数据行(从第2行开始)设置日期格式:

DateColumns = ['Start_Date', 'End_Date', 'Birthday']
target_format = 'yyyy-mm-dd;@'

for col_name in DateColumns:
    # 先确认表头存在,避免KeyError
    if col_name not in col_name_to_letter:
        print(f"警告:未找到表头 {col_name}")
        continue
    col_letter = col_name_to_letter[col_name]
    # 遍历数据行设置格式
    for row in range(2, worksheet.max_row + 1):
        cell = worksheet[f"{col_letter}{row}"]
        cell.number_format = target_format

# 保存修改后的文件
workbook.save('path\\updated_filename.xlsx')

错误原因说明

  • KeyError: "Start_Date":要么是表头拼写和代码里的不一致(注意大小写),要么是遍历列时没正确获取表头值。上面的代码加了判断,避免直接报错。
  • AttributeError: 'tuple' object has no attribute 'number_format':之前用列索引数字拼接单元格引用(比如01),这不是合法的单元格地址,导致获取到的不是单个单元格对象,而是元组,自然没有number_format属性。用get_column_letter转成字母后,就能正确获取单元格对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:34