openpyxl中列宽以字符为单位(如ws.column_dimensions['A'].width = 15),行高以磅为单位(如ws.row_dimensions[1].height = 25),需调用wb.save()才能生效。

在用 openpyxl 处理 Excel 文件时,设置行高和列宽是常见的格式调整需求。它不支持像 Excel 界面那样“自动调整”,但可以精确控制每个行或列的尺寸(单位为点或字符宽度)。
设置列宽(以字符为单位)
列宽单位是「字符宽度」,基于 Excel 默认字体(通常是 Calibri 11 号)下 0 字符的宽度。数值一般设为 8–30 之间较合理,太小会截断内容,太大则浪费空间。
- 单列设置:
ws.column_dimensions['A'].width = 15 - 多列批量设置:可用循环,例如
for col in ['A', 'B', 'C']: ws.column_dimensions[col].width = 12 - 用数字索引列更灵活:比如第 1 列(A)→
ws.column_dimensions[get_column_letter(1)].width = 10,需先导入from openpyxl.utils import get_column_letter
设置行高(以磅为单位)
行高单位是「磅(point)」,1 磅 ≈ 1/72 英寸。默认行高约 15(对应 20 像素左右),常规正文建议 16–24,标题行可设到 30+。
- 单行设置:
ws.row_dimensions[1].height = 25(第 1 行) - 连续多行:循环设置,如
for row in range(1, 6): ws.row_dimensions[row].height = 18 - 注意:行号从 1 开始,不是 0;不能用
ws['1'].height这类写法
注意事项和常见问题
有些行为容易被忽略,但会影响效果:
立即学习“Python免费学习笔记(深入)”;
- 设置后必须调用
wb.save('xxx.xlsx')才会生效,内存中修改不会自动保存 - 列宽设为
None或 0 会恢复默认(但不推荐设 0,可能导致显示异常) - 行高设为
None会恢复自动高度(即根据字体大小自适应),但openpyxl的自动高度支持有限,复杂换行可能仍需手动设高 - 合并单元格区域的行高/列宽,只影响左上角单元格所在行列,其余部分由合并逻辑覆盖,无需单独设置
基本上就这些。只要记住列宽是字符、行高是磅,用 column_dimensions 和 row_dimensions 对应操作,就能稳稳控制表格外观。










