使用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。
目前的处理流程:
- SQL查询时用
DateFormat(exampl_date, '%Y-%m-%d')处理日期字段,导入DataFrame后这些列的数据类型是Object; - 我写了一个格式化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
相关产品推荐
相关产品推荐

