使用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
相关产品推荐
相关产品推荐

