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
相关产品推荐
相关产品推荐

