Python—实现Excel的最合适列宽(openpyxl)

本文介绍如何利用Python的openpyxl模块自动调整Excel文件中各sheet的列宽,以适应列中数据的最大长度,提升用户体验。通过读取Excel数据,计算每列的最长字符串长度,并将该长度作为列宽,确保数据完整显示。
该文章已生成可运行项目,

Python的Pandas模块是处理Excel的利器,尤其是加工保存Excel非常方便,但是唯独想让导出的Excel自动调整列宽或者行高,确实做不到啊,尤其是加工后还需要使用者自己调整列宽,非常不便。

所以必须openpyxl模块助力。这是最简单的实现:

from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
ws = wb[wb.sheetnames[0]]                  # 打开第一个sheet
ws.column_dimensions['A'].width = 20.0     # 调整列A宽
ws.row_dimensions[1].height = 40    	   # 调整行1高
ws.save('test.xlsx')

但是如果随便让 一个Excel每个sheet都实现调整列宽怎么办呢,我写了这么一个函数
获取每一个sheet的每一列的最长值,将其设置为列宽

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter 
def reset_col(filename):
	wb=load_workbook(filename)
	for sheet in wb.sheetnames:
		ws=wb[sheet]
		df=pd.read_excel(filename,sheet).fillna('-')
		df.loc[len(df)]=list(df.columns)						#把标题行附加到最后一行,以考虑标题行的宽度问题
		if not df.empty:
			for col in df.columns:									#遍历每一列
				index=list(df.columns).index(col)					#列序号
				letter=get_column_letter(index+1)					#列字母
				collen=df[col].apply(lambda x:len(str(x).encode())).max()	#获取这一列长度的最大值 当然也可以用min获取最小值 mean获取平均值
				ws.column_dimensions[letter].width=collen*1.2+4		#也就是列宽为最大长度*1.2 可以自己调整

	wb.save(filename)
	
reset_col('test.xlsx')

注意Openpyxl仅仅支持最新的.xlsx格式,如果执行有这样的报错:
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\reader\excel.py”, line 94, in _validate_archive raise InvalidFileException(msg) openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert
说明文件格式老旧,请打开Excel文件,选择另存为.xlsx格式

本文章已经生成可运行项目
### 使用OpenPyXL复制Excel表格中指定度设置 为了实现这一目标,可以通过遍历源工作表中的每一并获取其度属性,再将这些度应用到目标工作表对应的上。下面是一个具体的Python脚本实例: ```python import openpyxl def copy_column_widths(source_file, target_file): # 加载源文件和目标文件的工作簿对象 source_wb = openpyxl.load_workbook(source_file) target_wb = openpyxl.load_workbook(target_file) # 获取第一个工作表作为操作对象 source_ws = source_wb.worksheets[0] target_ws = target_wb.worksheets[0] # 遍历源工作表的所有,并记录每的最大字符长度以及相应的字母表示形式 for col in source_ws.columns: column_letter = col[0].column_letter # 将源工作表该的实际度赋给目标工作表对应位置 if column_letter in source_ws.column_dimensions: width = source_ws.column_dimensions[column_letter].width target_ws.column_dimensions[column_letter].width = width # 保存更改后的目标文件 target_wb.save(target_file) copy_column_widths('source.xlsx', 'destination.xlsx') ``` 此代码片段展示了如何通过`openpyxl`库加载两个不同的Excel文档——一个是用来读取原始信息(`source.xlsx`);另一个则是要被更新的目标文件(`destination.xlsx`)。之后,在循环迭代过程中访问每一个单元格所在的号(即字母),并通过检查是否存在自定义度设定来决定是否将其应用于新的工作表中[^2]。 需要注意的是,当处理`.xls`格式的老版Excel文件时,应考虑使用其他专门针对这种格式设计的第三方模块如`xlrd`或`xlutils.copy()`来进行类似的特性迁移任务[^1]。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值