当前位置:首页 > Python > 正文

Python xlwt设置表格列宽与行高教程 | 实用指南

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方法为整行设置样式
  • 对于大型数据集,先计算最大宽度再设置列宽
  • 日期和时间使用特殊格式以提高可读性
  • 数值列使用千位分隔符

© 2023 Python Excel处理教程 | 使用xlwt设置表格列宽和行高

发表评论