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

从SQL提取数据导出到Excel时日期格式自动变更,如何停止该自动转换?

问题原因

pandas从SQL读取datetime类型字段时会默认解析为datetime64类型,调用to_excel导出时Excel会自动适配本地默认日期显示格式,导致原有的带毫秒的完整时间格式被修改。手动复制SQL查询结果时相当于粘贴纯文本字符串,不会触发Excel的格式自动转换,因此格式正常。

解决方法

方案1:导出前将日期列转为指定格式的字符串

直接把日期字段按照你需要的格式转成字符串,避免Excel自动识别为日期类型,修改循环部分代码即可:

for i, iter in zip(input_lines, file_name_lines):
    df = pd.read_sql(i, cnxn)
    # 遍历所有datetime类型的列,转成指定格式字符串
    for col in df.select_dtypes(include=['datetime64', 'datetime64[ns]']).columns:
        df[col] = df[col].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3] # 截取到毫秒,去掉最后三位微秒
    df.to_excel('{}.xlsx'.format(iter), index=False)
    print(iter,' is Done')

注意:这个方案导出后日期字段是文本类型,无法直接在Excel里做日期计算,如果需要保留日期类型属性请用方案2

方案2:使用ExcelWriter指定Excel的日期显示格式

导出时强制设置Excel的日期显示格式,既保留日期类型,又能按你要的格式显示:

for i, iter in zip(input_lines, file_name_lines):
    df = pd.read_sql(i, cnxn)
    with pd.ExcelWriter('{}.xlsx'.format(iter), engine='xlsxwriter', datetime_format='yyyy-mm-dd hh:mm:ss.000') as writer:
        df.to_excel(writer, index=False)
    print(iter,' is Done')

这个方案需要提前安装xlsxwriter库,执行pip install xlsxwriter即可安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:39:02