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

使用XlsxWriter与Pandas无法将datetime格式化为'dd/mm/yy'求助

问题原因及解决方案

你的代码失效是因为Pandas在写入datetime64类型数据到Excel时,会自动给每个日期单元格添加默认的日期格式,而你用set_column设置的列格式优先级低于单元格的单独格式,所以看不到变化。

给你两种可行的解决办法:

办法一:直接在ExcelWriter中指定日期格式

这是最简单的方式,创建ExcelWriter时直接通过date_format参数设置全局日期格式,Pandas会自动应用这个格式到所有datetime列:

df = pd.read_excel("\\test.xlsx", sheet_name='test')
df['Col1'] = pd.to_datetime(df['Col1'])

# 创建Writer时指定日期格式
writer = pd.ExcelWriter("\\test1.xlsx", engine='xlsxwriter', date_format='dd/mm/yy')
df.to_excel(writer, sheet_name='test', index=False)

writer.close()

办法二:遍历单元格手动设置格式

如果你需要对特定单元格或列做更精细的格式控制,可以遍历目标列的单元格,手动应用格式覆盖默认设置:

df = pd.read_excel("\\test.xlsx", sheet_name='test')
df['Col1'] = pd.to_datetime(df['Col1'])

writer = pd.ExcelWriter("\\test1.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name='test', index=False)

book = writer.book
sheet = writer.sheets['test']
format_c = book.add_format({'font_color': 'black', 'num_format': 'dd/mm/yy'})

# 获取Col1列的索引位置
col_idx = df.columns.get_loc('Col1')
# 从第1行开始遍历(跳过表头行)
for row in range(1, len(df) + 1):
    # 获取对应单元格的日期值,重新写入并应用格式
    sheet.write(row, col_idx, df.iloc[row-1]['Col1'], format_c)

writer.close()

注意:第一种办法会统一设置所有datetime列的格式,第二种办法可以针对单个列或特定单元格定制格式,根据你的需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:45:34