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

使用XlsxWriter设置Excel自定义日期格式后不生效,需双击单元格才显示预期格式的问题求助

XlsxWriter设置Excel自定义日期格式后不生效,需双击单元格才显示预期格式的问题求助

大家好,我最近碰到一个Excel日期格式化的棘手问题,想请教下各位大佬:

我用Jupyter Notebook从Athena拉取数据到Pandas DataFrame,然后用XlsxWriter把这个DataFrame写入Excel工作簿。其中日期列需要设置自定义格式[$-en-US,1]dd-mm-yy,代码里已经配置了这个格式,但Excel打开后日期还是显示成2023-07-10这种原始样式,必须双击单元格才会切换成预期的10-07-23。

目前的处理流程:

  1. SQL查询时用DateFormat(exampl_date, '%Y-%m-%d')处理日期字段,导入DataFrame后这些列的数据类型是Object;
  2. 我写了一个格式化Excel的函数,核心代码如下:
def format_excel(dataframe, worksheet):
    # 创建新工作表
    dataframe.to_excel(writer, sheet_name=worksheet, startrow=3, header=False, index=False)
    
    workbook = writer.book
    worksheet = writer.sheets[worksheet]
    
    # 定义各类单元格格式
    default_format = workbook.add_format({
        'font_name': 'Arial',
        'font_size': '10'})
    
    heading_format = workbook.add_format({
        'text_wrap': True,
        'bold': True,
        'valign': 'top',
        'font_color': '#4682B4',
        'font_name': 'Courier New',
        'font_size': '12'})
    
    date_format = workbook.add_format({
        'num_format': '[$-en-US,1]dd-mm-yy'})
    
    # 应用默认格式并设置列宽
    worksheet.set_column('A:B', 23, default_format)
    worksheet.set_column('C:C', 24, default_format)
    worksheet.set_column('D:D', 28, default_format)
    worksheet.set_column('E:M', 19, default_format)
    
    # 设置前3行行高
    worksheet.set_row(0, 30)
    worksheet.set_row(1,  1)
    worksheet.set_row(2, 25)
    
    # 添加标题行
    run_day_formatted = run_day.strftime("%d/%m/%Y")
    worksheet.merge_range('A1:F1', 'sometext ' + run_day_formatted + ' and '  + run_day_formatted, heading_format)
    
    # 应用日期格式到指定列
    worksheet.set_column('F:M', 19, date_format)
    
    # 添加并格式化列名
    header_format = workbook.add_format({
        'bold': True,
        'text_wrap': True,
        'valign': 'top',
        'fg_color': '#C0C0C0'})
    
    for col_num, value in enumerate(dataframe.columns.values):
        worksheet.write(2, col_num, value, header_format)

# 初始化ExcelWriter并生成工作簿
writer = pd.ExcelWriter(file_name(), engine='xlsxwriter')
format_excel(df_results, 'some name')
writer.close()
print('Excel created')

我尝试过的解决方案(但没成功):

我想着可能是DataFrame里的日期类型不对,于是试着把日期列转成datetime类型:

date_columns = [The Date Columns]  # 这里替换成实际的日期列名列表
for column in date_columns:
    df_results[column] = pd.to_datetime(df_results[column], format='%Y-%m-%d')

结果反而更糟:Excel里的日期变成了2023-07-05 00:00:00,而且XlsxWriter设置的自定义格式完全被覆盖成了yyyy-mm-dd hh:mm:ss,根本不是我想要的[$-en-US,1]dd-mm-yy。

预期效果:

我想要复刻旧Excel文件的效果:单元格显示10-07-23,编辑栏里显示2023-07-10,且单元格的自定义格式字符串就是[$-en-US,1]dd-mm-yy,因为需要和旧文件完全一致才能对账。

有没有大佬知道怎么解决这个问题呀?

备注:内容来源于stack exchange,提问作者Joe Morris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:09:37