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

