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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:54:56