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

使用xlsxwriter导出Excel时文本与日期格式设置问题求助

问题解决方案

1. 日期格式未生效

Pandas写入Excel时会给日期类型单元格自动添加默认格式,覆盖后续设置的列级格式。按以下步骤修复:

  • 先确认DataFrame中的日期列是datetime类型,若为字符串需先转换:
    df['日期列名1'] = pd.to_datetime(df['日期列名1'])
    df['日期列名2'] = pd.to_datetime(df['日期列名2'])
    
  • 写入后遍历日期列的单元格,强制应用自定义格式(覆盖Pandas默认格式):
    修改后的核心代码:
    com = {"font_name":"Segoe UI", "font_size":11, "valign":"vcenter"}
    with pd.ExcelWriter(fname, engine="xlsxwriter") as writer:
        # 提前创建所有格式
        fmt1 = writer.book.add_format(com|{"align":"center","num_format":"@"})
        fmt2 = writer.book.add_format(com|{"align":"left","num_format":"@"})
        fmt3 = writer.book.add_format(com|{"align":"center","num_format":"m/d/yyyy"})
        
        for ctype in code_types:
            df = pd.read_parquet(f"{ctype}.parquet.gz")
            df.to_excel(writer, index=False, sheet_name=ctype)
            
            sheet = writer.sheets[ctype]
            _ = sheet.set_column("A:B", 12, fmt1)
            _ = sheet.set_column("C:C", 60, fmt2)
            
            if ctype != "diff":
                _ = sheet.set_column("D:D", 12, fmt1)
                _ = sheet.set_column("E:E", 40, fmt2)
                # 遍历日期列单元格,强制应用格式(跳过表头行)
                for row_num in range(1, len(df)+1):
                    sheet.write(row_num, 5, df.iloc[row_num-1,5], fmt3)  # F列(索引5)
                    sheet.write(row_num, 6, df.iloc[row_num-1,6], fmt3)  # G列(索引6)
    

2. 强制非日期列为Text格式

xlsxwriter中设置Excel原生文本格式需用num_format="@",而非"Text"(后者会被识别为自定义格式)。修改格式定义:

fmt1 = writer.book.add_format(com|{"align":"center","num_format":"@"})
fmt2 = writer.book.add_format(com|{"align":"left","num_format":"@"})

若要彻底确保非日期列是文本类型,可在读取时将非日期列转为字符串:

date_cols = ['F列名', 'G列名']  # 替换为你的日期列实际名称
df = pd.read_parquet(f"{ctype}.parquet.gz")
for col in df.columns:
    if col not in date_cols:
        df[col] = df[col].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:48:30