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

使用tablib将数据集导出到Excel文件时如何保留日期格式?

问题原因

Excel中的日期本质是从1900年1月1日开始计数的数值序列,日常看到的11/23/2007这类格式只是单元格的显示样式。tablib默认导出xls文件时不会给日期类型单元格自动设置对应显示格式,因此会直接展示底层的数值序列。

解决方案

方案1:转为文本格式日期(操作最简单)

导出前将datetime对象格式化为和原文件一致的字符串,导出后显示效果和原文件完全一致:

from datetime import datetime

# 替换为你实际的日期列列名
date_col_name = "你的日期列名"
date_col_idx = headers.index(date_col_name)

# 遍历处理所有行的日期列
for row in new_dataset:
    date_val = row[date_col_idx]
    if isinstance(date_val, datetime):
        # 格式化为原格式的字符串
        row[date_col_idx] = date_val.strftime("%m/%d/%Y")

# 执行原有导出逻辑即可
with open('output-2.xls', 'wb') as f:
    new_dataset.headers = headers
    f.write(new_dataset.export('xls'))

注意:该方案导出的日期为文本格式,无法直接在Excel中做日期类的运算筛选

方案2:保留原生日期格式(支持Excel日期运算)

如果需要导出的日期是Excel可识别的原生格式,不使用tablib的默认导出方法,改用其底层依赖的xlwt库手动设置单元格格式:

import xlwt
from datetime import datetime

# 初始化工作簿和工作表
wb = xlwt.Workbook()
ws = wb.add_sheet("Sheet1")

# 定义要使用的日期显示格式
date_style = xlwt.easyxf(num_format_str="MM/DD/YYYY")

# 写入表头
for col_idx, header in enumerate(headers):
    ws.write(0, col_idx, header)

# 写入数据
date_col_idx = headers.index("你的日期列名")
for row_idx, row in enumerate(new_dataset, start=1):
    for col_idx, cell_val in enumerate(row):
        # 日期列用指定格式写入
        if col_idx == date_col_idx and isinstance(cell_val, datetime):
            ws.write(row_idx, col_idx, cell_val, date_style)
        else:
            ws.write(row_idx, col_idx, cell_val)

# 保存文件
wb.save("output-2.xls")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:00:03