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

Python自动化Excel 2016时如何强制设置日期为UK格式

解决Excel日期格式自动转为US格式的问题

这个坑我之前也踩过!核心问题在于直接把日期字符串赋值给单元格时,Excel的自动解析逻辑会混淆UK与US格式——哪怕系统区域已经设为英国,win32com在处理字符串日期时还是容易出现解析偏差。

解决思路很清晰:不要直接传递字符串,先把输入的UK格式日期转换成Python的datetime对象,再赋值给单元格。这样Excel会接收标准的日期数值,然后按照你预先设置的UK日期格式正常显示,不会再乱转换。

修改后的完整代码

import os.path
import win32com.client
from datetime import datetime

uk_date_input = input("Enter date in UK format e.g. dd/mm/yyyy:") # 输入12/01/2022 (12 January 2022)
file_path = r"C:\temp\exampleFile.xlsb"  # 加r前缀避免路径转义字符问题

# 先把输入字符串转为datetime对象,严格遵循UK格式解析
try:
    target_date = datetime.strptime(uk_date_input, "%d/%m/%Y")
except ValueError:
    print("Invalid date format! Please use dd/mm/yyyy.")
    exit()

if os.path.exists(file_path):
    xlApp = win32com.client.DispatchEx('Excel.Application')
    xlApp.Visible = False  # 让Excel后台运行,避免弹窗干扰
    wb = xlApp.Workbooks.Open(Filename=file_path)
    ws = wb.Worksheets("Sheet1")
    
    # 赋值datetime对象而非字符串,让Excel正确识别日期数值
    ws.Range("B8").Value = target_date
    
    wb.Save()
    wb.Close(False)
    xlApp.Quit()
    # 手动清理COM对象,防止Excel进程在后台残留
    del wb, ws, xlApp

print("All done")

关键细节说明

  • datetime对象转换:datetime.strptime(uk_date_input, "%d/%m/%Y")会严格按照日/月/年的格式解析输入,生成标准的Python日期对象。win32com会自动将这个对象转换成Excel内部的日期数值(比如2022年1月12日对应数值44562),彻底避免解析歧义。
  • 路径转义处理:给文件路径加上r前缀,避免\t这类转义字符引发的路径错误。
  • 进程残留预防:最后手动删除COM对象,防止Excel在后台偷偷残留进程占用资源。

这样修改后,你输入12/01/2022,Excel的B8单元格就会按照预设的UK格式显示为12/01/2022(对应2022年1月12日),不会再被错误转换成US格式了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:43:12