Python xlwt设置表格列宽与行高教程 | 实用指南
- Python
- 2025-08-09
- 301
Python xlwt设置表格列宽与行高教程
使用xlwt库创建专业美观的Excel表格
xlwt库简介
xlwt是一个用于创建Excel文件的Python库,特别适用于生成.xls格式的Excel文件(Excel 97-2003格式)。它允许开发人员完全控制Excel文件的各个方面,包括数据格式、字体样式、单元格颜色以及最重要的列宽和行高设置。
主要特点:
- 创建和修改Excel文件
- 设置单元格格式(字体、颜色、边框)
- 控制列宽和行高
- 添加公式和超链接
- 支持日期和时间格式
安装xlwt库
安装xlwt非常简单,只需使用pip命令:
pip install xlwt
如果你使用的是Anaconda,可以使用以下命令:
conda install -c anaconda xlwt
基础Excel创建
在开始设置列宽和行高之前,让我们先创建一个基本的Excel文件:
import xlwt
# 创建工作簿和工作表
workbook = xlwt.Workbook()
sheet = workbook.add_sheet('员工信息')
# 添加标题行
titles = ['姓名', '部门', '职位', '入职日期', '工资']
for col, title in enumerate(titles):
sheet.write(0, col, title)
# 添加数据
data = [
['张三', '技术部', '工程师', '2020-03-15', 15000],
['李四', '市场部', '经理', '2018-07-22', 22000],
['王五', '财务部', '会计', '2019-11-30', 12000]
]
for row_idx, row_data in enumerate(data, start=1):
for col_idx, value in enumerate(row_data):
sheet.write(row_idx, col_idx, value)
# 保存文件
workbook.save('员工信息.xls')
这段代码会创建一个包含员工信息的简单Excel表格,但所有列宽和行高都是默认值,看起来不够专业。
设置列宽
在xlwt中,设置列宽需要使用col()
方法并指定宽度值。宽度单位是1/256个字符宽度。
# 设置列宽
sheet.col(0).width = 256 * 20 # 第1列宽20个字符
sheet.col(1).width = 256 * 15 # 第2列宽15个字符
sheet.col(2).width = 256 * 25 # 第3列宽25个字符
sheet.col(3).width = 256 * 12 # 第4列宽12个字符
sheet.col(4).width = 256 * 10 # 第5列宽10个字符
列宽设置技巧
- 默认列宽:Excel默认列宽约为8.43个字符(约64像素)
- 换算公式:宽度 = 256 × 字符数
- 自动调整:对于不确定宽度的列,可以设置一个基础宽度,然后根据内容调整
- 标题宽度:列宽应至少能容纳标题文本
列宽设置示例表
列索引 | 字符宽度 | xlwt设置值 | 适用场景 |
---|---|---|---|
0 | 15-20 | 256*20 | 姓名、产品名称 |
1 | 10-15 | 256*15 | 部门、类别 |
2 | 8-12 | 256*10 | 日期、数字 |
设置行高
设置行高需要使用row()
方法并指定高度值。高度单位是1/20个点(point),默认行高为12.75点。
# 设置行高
header_style = xlwt.easyxf('font: bold on; align: vert center, horiz center')
# 设置标题行高
row = sheet.row(0)
row.set_style(header_style)
row.height = 20 * 30 # 30点高度
# 设置数据行高
for row_idx in range(1, len(data)+1):
row = sheet.row(row_idx)
row.height = 20 * 20 # 20点高度
行高设置技巧
- 默认行高:Excel默认行高约为15点(约20像素)
- 换算公式:高度 = 20 × 点数
- 标题行:通常设置比数据行高30-50%
- 多行文本:如果单元格中有多行文本,需要增加行高
- 垂直居中:设置行高时最好同时设置垂直对齐方式
自动调整列宽
xlwt本身不支持自动调整列宽,但我们可以通过计算文本长度来近似实现:
def auto_adjust_column_width(sheet, max_rows=100):
# 遍历每一列
for col_idx in range(sheet.ncols):
max_width = 0
# 遍历行,查找最大宽度
for row_idx in range(min(sheet.nrows, max_rows)):
cell_value = sheet.cell_value(row_idx, col_idx)
# 计算文本长度(中文字符算2个宽度)
width = sum(2 if ord(c) > 127 else 1 for c in str(cell_value))
if width > max_width:
max_width = width
# 设置列宽,加2作为缓冲
sheet.col(col_idx).width = 256 * (max_width + 2)
# 在保存前调用
auto_adjust_column_width(sheet)
这个函数会遍历每列的内容,找到最长的文本,然后根据文本长度设置合适的列宽。
完整示例
下面是一个完整的示例,展示了如何创建带有合适列宽和行高的专业Excel表格:
import xlwt
from datetime import datetime
# 创建工作簿和工作表
workbook = xlwt.Workbook()
sheet = workbook.add_sheet('员工信息表')
# 定义样式
header_style = xlwt.easyxf(
'font: bold on, height 280; align: vert center, horiz center;'
'borders: left thin, right thin, top thin, bottom thin;'
'pattern: pattern solid, fore_colour light_green;'
)
data_style = xlwt.easyxf(
'align: vert center;'
'borders: left thin, right thin, top thin, bottom thin;'
)
date_style = xlwt.easyxf(
'align: vert center;'
'borders: left thin, right thin, top thin, bottom thin;'
num_format_str='YYYY-MM-DD'
)
# 设置标题行
titles = ['姓名', '部门', '职位', '入职日期', '工资(元)']
for col, title in enumerate(titles):
sheet.write(0, col, title, header_style)
# 设置初始列宽
sheet.col(0).width = 256 * 15 # 姓名
sheet.col(1).width = 256 * 15 # 部门
sheet.col(2).width = 256 * 20 # 职位
sheet.col(3).width = 256 * 12 # 入职日期
sheet.col(4).width = 256 * 12 # 工资
# 设置标题行高
sheet.row(0).height = 20 * 30 # 30点高度
# 添加数据
data = [
['张明', '技术研发部', '高级软件工程师', datetime(2020, 3, 15), 18500],
['李华', '市场营销部', '区域销售经理', datetime(2018, 7, 22), 24500],
['王芳', '人力资源部', '招聘主管', datetime(2019, 5, 10), 15200],
['赵刚', '财务部', '高级财务分析师', datetime(2017, 11, 30), 22800],
['刘洋', '客户服务部', '客户支持经理', datetime(2021, 2, 18), 16800]
]
for row_idx, row_data in enumerate(data, start=1):
row = sheet.row(row_idx)
row.set_style(data_style)
row.height = 20 * 22 # 22点高度
for col_idx, value in enumerate(row_data):
if isinstance(value, datetime):
sheet.write(row_idx, col_idx, value, date_style)
else:
sheet.write(row_idx, col_idx, value)
# 调整工资列为合适的宽度
sheet.col(4).width = 256 * 12 # 工资列
# 保存文件
workbook.save('员工信息表_专业版.xls')
最佳实践
以下是一些设置Excel列宽和行高的最佳实践:
📏 列宽设置
- 根据内容设置合适宽度,避免内容被截断
- 重要列可以设置更宽以便突出显示
- 数字列宽度要一致
- 列宽最小为3-4个字符
📐 行高设置
- 标题行比数据行高30-50%
- 多行内容需要增加行高
- 考虑使用自动换行功能
- 避免行高过大影响打印
🎨 样式一致性
- 相同类型数据使用相同列宽
- 使用样式模板保持统一
- 冻结标题行提升可读性
- 重要数据使用不同背景色
💡 高级技巧
- 使用
set_style
方法为整行设置样式 - 对于大型数据集,先计算最大宽度再设置列宽
- 日期和时间使用特殊格式以提高可读性
- 数值列使用千位分隔符
本文由ZangYanBing于2025-08-09发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20257752.html
发表评论