如何用Python的Openpyxl格式化从CSV导入XLSX的日期?
解决CSV转XLSX后日期文本无法转为日期格式的问题
核心原因
CSV文件中的日期是纯文本字符串,而非Excel可识别的日期数值(Excel日期本质是带格式的序列化数字)。你当前的代码只复制了单元格格式,但没有将文本内容转换为Excel能识别的日期值——所以即使改格式、用格式刷,内容还是文本,不会显示为日期。
解决方案
需要先将日期字符串解析为datetime对象,再赋值给单元格(openpyxl会自动将其转为Excel的日期数值),然后再设置日期格式。
修改后的代码示例:
from datetime import datetime from copy import copy # 基于openpyxl的修改代码 for col in range(1, mc2+1): for row in range(3, mr2+1): source = ws2.cell(column=col, row=row-1) cell = ws2.cell(column=col, row=row) # 优先处理值的类型转换 cell_value = source.value if cell_value: try: # 适配你数据中的日期格式,此处对应11/1/2023的%m/%d/%Y date_obj = datetime.strptime(cell_value, "%m/%d/%Y") cell.value = date_obj # 设置短日期显示格式 cell.number_format = "m/d/yyyy" except ValueError: # 非日期内容直接复制原值 cell.value = cell_value # 复制其他格式属性 cell.font = copy(source.font) cell.border = copy(source.border) cell.alignment = copy(source.alignment) cell.fill = copy(source.fill)
关键说明
- 必须先把文本转成
datetime对象再赋值,openpyxl会自动将其转换为Excel内部的日期数值,此时设置日期格式才会生效。 - 手动格式刷无效的原因:格式刷只改变单元格的显示格式规则,但单元格内容还是文本,Excel不会自动将文本转为日期值,必须手动或通过代码完成类型转换。
- 注意异常处理:避免非日期格式的单元格导致代码报错,可根据实际数据调整日期解析的格式字符串(比如
%Y-%m-%d等)。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

