pandas openpyxl 设置Excel 列宽自适应
引入包
1 2 3 4 | import pandas as pd from openpyxl.utils import get_column_letter from pandas import ExcelWriter import numpy as np |
自适应函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def to_excel_auto_column_weight(df: pd.DataFrame, writer: ExcelWriter, sheet_name): """DataFrame保存为excel并自动设置列宽""" df.to_excel(writer, sheet_name = sheet_name, index = False ) # 计算表头的字符宽度 column_widths = ( df.columns.to_series(). apply ( lambda x: len (x.encode( 'gbk' ))).values ) # 计算每列的最大字符宽度 max_widths = ( df.astype( str ).applymap( lambda x: len (x.encode( 'gbk' ))).agg( max ).values ) # 计算整体最大宽度 widths = np. max ([column_widths, max_widths], axis = 0 ) # 设置列宽 worksheet = writer.sheets[sheet_name] for i, width in enumerate (widths, 1 ): # openpyxl引擎设置字符宽度时会缩水0.5左右个字符,所以干脆+2使左右都空出一个字宽。 worksheet.column_dimensions[get_column_letter(i)].width = width + 2 |
数据
1 2 3 4 5 6 7 8 | df = pd.DataFrame({ 'Region' : [ 'East' , 'East' , 'South' , 'North' , 'West' , 'South' , 'North' , 'West' , 'West' , 'South' , 'West' , 'South' ], 'Item' : [ 'Apple' , 'Apple' , 'Orange' , 'Apple' , 'Apple' , 'Pear' , 'Pear' , 'Orange' , 'Grape' , 'Pear' , 'Grape' , 'Orange' ], 'Volume' : [ 9000 , 5000 , 9000 , 2000 , 9000 , 7000 , 9000 , 1000 , 1000 , 10000 , 6000 , 3000 ], 'Month' : [ 'July' , 'July' , 'September' , 'November' , 'November' , 'October' , 'August' , 'December' , 'November' , 'April' , 'January' , 'MaysdfasdfljasjASDFLAJSDFJADSFASFLASDFJASDLFJADSFKADSJF ASFDFDDSFASDFASD' ] }) |
保存
1 2 | with pd.ExcelWriter(r '/Users/kingggg/Documents/PycharmProjects/tools/others/test.xlsx' ) as writer: to_excel_auto_column_weight(df, writer, f 'TEST' ) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)