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

导出df_brands至Excel时保留格式并调整列宽的技术问题

解决方案:保留DataFrame格式并导出带列宽的Excel

方案1:使用Pandas Styler配合openpyxl引擎直接导出

如果你的df_brands格式是通过df.style设置的(比如单元格颜色、字体、边框等),可以直接用Styler的导出能力,搭配openpyxl引擎完成格式保留,再通过代码调整列宽:

import pandas as pd
from openpyxl import load_workbook

# 假设你已完成df_brands的样式设置,示例如下:
styled_df = df_brands.style \
    .highlight_max(color='#90EE90') \
    .set_table_styles([{'selector': 'th', 'props': [('font-size', '12pt'), ('text-align', 'center')]}])

# 导出带样式的Excel文件
output_file = 'brands_output.xlsx'
styled_df.to_excel(output_file, engine='openpyxl', index=False)

# 加载文件并自动调整列宽
wb = load_workbook(output_file)
ws = wb.active

for column_cells in ws.columns:
    max_length = 0
    column_letter = column_cells[0].column_letter
    for cell in column_cells:
        try:
            if len(str(cell.value)) > max_length:
                max_length = len(str(cell.value))
        except:
            pass
    # 额外增加宽度避免内容拥挤
    ws.column_dimensions[column_letter].width = max_length + 2

wb.save(output_file)

方案2:使用xlsxwriter引擎自定义格式与列宽

如果需要更精细的样式控制,可直接用xlsxwriter引擎手动定义格式并应用,同时设置列宽:

import pandas as pd

output_file = 'brands_output.xlsx'
writer = pd.ExcelWriter(output_file, engine='xlsxwriter')

# 将DataFrame写入Excel工作表
df_brands.to_excel(writer, sheet_name='Brands', index=False)

# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Brands']

# 定义表头和数据单元格样式
header_format = workbook.add_format({
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'fg_color': '#D7E4BC',
    'border': 1
})

data_format = workbook.add_format({
    'valign': 'top',
    'border': 1
})

# 应用表头样式
for col_num, value in enumerate(df_brands.columns.values):
    worksheet.write(0, col_num, value, header_format)

# 应用数据单元格样式
for row_num in range(1, len(df_brands)+1):
    for col_num in range(len(df_brands.columns)):
        worksheet.write(row_num, col_num, df_brands.iloc[row_num-1, col_num], data_format)

# 自动计算并设置列宽
for col_num, col_name in enumerate(df_brands.columns):
    # 取列名长度和列内容最大长度的较大值
    max_len = max(df_brands[col_name].astype(str).map(len).max(), len(col_name))
    worksheet.set_column(col_num, col_num, max_len + 2)

writer.close()

注意事项

  • 提前安装依赖库:pip install pandas openpyxl xlsxwriter
  • 如果你的DataFrame样式是通过第三方工具设置的,需对应调整样式定义代码,确保格式能被Excel引擎识别
  • 两种方案都保留了表格的可编辑性(区别于导出图片),同时完整保留格式并优化列宽显示

内容的提问来源于stack exchange,提问作者Юра Ковалeв

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:18:15