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

在Django中使用xlwt导出Excel时日期时间显示为数字的问题求助

解决Django用xlwt导出Excel时日期显示为数字的问题

Hey there! Let me clear this up for you quickly:

首先,那串数字是什么?

你看到的43239.6389467593是Excel的日期序列值:

  • 整数部分(43239)代表从Excel的起始基准日(1900年1月0日)到目标日期的总天数
  • 小数部分(0.6389...)代表当天的时间占比(比如0.6389×24≈15.33小时,也就是15点20分左右)

两种解决办法

办法1:导出时直接让xlwt设置日期格式(根源解决)

在Django代码里,给日期时间字段的单元格指定Excel能识别的日期格式样式,这样导出后就直接显示正常的日期时间了。示例代码:

import xlwt
from datetime import datetime
from django.http import HttpResponse

def export_to_excel(request):
    # 创建Excel工作簿和工作表
    response = HttpResponse(content_type='application/ms-excel')
    response['Content-Disposition'] = 'attachment; filename="data.xls"'
    
    wb = xlwt.Workbook(encoding='utf-8')
    ws = wb.add_sheet('导出数据')
    
    # 定义日期时间格式的样式
    datetime_style = xlwt.XFStyle()
    # 自定义你想要的日期格式,比如'yyyy-mm-dd hh:mm:ss'或'mm/dd/yyyy HH:MM'
    datetime_style.num_format_str = 'yyyy-mm-dd hh:mm:ss'
    
    # 假设你从数据库获取了数据,这里用示例日期替代
    sample_datetime = datetime(2018, 5, 20, 15, 20, 30)
    
    # 写入单元格时应用样式
    ws.write(0, 0, '日期时间', xlwt.XFStyle())  # 表头
    ws.write(1, 0, sample_datetime, datetime_style)  # 带样式的日期
    
    wb.save(response)
    return response

这段代码的核心是通过num_format_str指定日期格式,让xlwt把Python的datetime对象转换成Excel能解析的日期类型,而不是输出原始的序列值。

办法2:对已导出的Excel文件手动转换

如果已经导出了文件不想改代码,可以直接在Excel里调整:

  • 选中所有显示数字的日期单元格
  • 右键选择「设置单元格格式」(或按快捷键Ctrl+1)
  • 在弹出的窗口中,切换到「数字」标签:
    • 选择「日期」,然后挑一个你需要的日期时间格式
    • 或者选择「自定义」,手动输入格式代码(比如yyyy-mm-dd hh:mm:ss)
  • 点击确定后,数字就会自动转换成正常的日期时间了

如果需要批量处理,也可以用Excel公式:在空白单元格输入=TEXT(A1,"yyyy-mm-dd hh:mm:ss")(把A1换成你的目标单元格),然后下拉填充即可。

内容的提问来源于stack exchange,提问作者Janardhan Reddy. Meeniga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:53