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

Python xlwt库访问工作表完整教程 | Python Excel操作指南

Python xlwt库访问工作表完全指南

掌握Excel工作表创建、访问和操作的实用技巧

xlwt库简介

xlwt是一个用于创建和写入Microsoft Excel文件的Python库,特别适合处理.xls格式的文件(Excel 97-2003格式)。

主要特点:

  • 支持创建工作表、写入数据和设置格式
  • 简单易用的API,学习曲线平缓
  • 不需要安装Excel即可使用
  • 跨平台兼容性(Windows、Linux、macOS)

注意: xlwt仅支持创建和写入Excel文件,不支持读取或修改现有文件。对于读取操作,可以考虑使用xlrd库。

安装xlwt库

使用pip命令安装xlwt非常简单:

pip install xlwt

验证安装:

import xlwt
print(xlwt.__version__)  # 输出安装的xlwt版本

创建工作簿和工作表

使用xlwt创建Excel文件的第一步是创建工作簿(Workbook)对象:

import xlwt

# 创建Workbook对象
workbook = xlwt.Workbook(encoding='utf-8')

添加工作表使用add_sheet()方法:

# 添加一个名为"员工数据"的工作表
sheet1 = workbook.add_sheet('员工数据')

# 添加第二个工作表
sheet2 = workbook.add_sheet('部门统计')

每个工作表都是一个独立的Sheet对象,可以分别进行操作。

访问工作表的方法

在xlwt中,访问工作表主要有两种方式:

1. 创建时保存引用

在创建工作表时保存返回的Sheet对象:

# 创建时保存引用
employee_sheet = workbook.add_sheet('员工信息')
department_sheet = workbook.add_sheet('部门信息')

# 后续使用保存的引用访问
employee_sheet.write(0, 0, '姓名')
department_sheet.write(0, 0, '部门名称')

2. 通过工作表名称访问

虽然xlwt没有直接提供按名称访问的方法,但可以通过以下方式实现:

# 创建多个工作表
workbook.add_sheet('销售数据')
workbook.add_sheet('库存数据')

# 通过名称访问特定工作表
def get_sheet_by_name(workbook, sheet_name):
    for i in range(workbook._Workbook__worksheets.__len__()):
        sheet = workbook._Workbook__worksheets[i]
        if sheet.name == sheet_name:
            return sheet
    return None

# 获取"销售数据"工作表
sales_sheet = get_sheet_by_name(workbook, '销售数据')
if sales_sheet:
    sales_sheet.write(0, 0, '产品名称')

最佳实践: 建议在创建工作表时保存引用,特别是当工作表数量不多时,这样代码更简洁高效。

向工作表写入数据

使用write()方法向工作表写入数据:

# 基本写入操作
sheet.write(row, col, value)

# 示例:在A1单元格写入标题
sheet.write(0, 0, '员工信息表')

# 在B2单元格写入数字
sheet.write(1, 1, 42)

# 在C3单元格写入浮点数
sheet.write(2, 2, 3.14159)

# 在D4单元格写入日期
import datetime
sheet.write(3, 3, datetime.datetime.now())

批量写入数据示例:

# 表头
headers = ['ID', '姓名', '部门', '工资']
for col, header in enumerate(headers):
    sheet.write(0, col, header)

# 示例数据
employees = [
    [1, '张三', '技术部', 12000],
    [2, '李四', '市场部', 9800],
    [3, '王五', '财务部', 11500],
]

# 写入数据行
for row, employee in enumerate(employees, start=1):
    for col, value in enumerate(employee):
        sheet.write(row, col, value)

设置单元格样式

xlwt允许通过XFStyle对象自定义单元格样式:

# 创建样式对象
style = xlwt.XFStyle()

# 设置字体
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.height = 280  # 14pt * 20
style.font = font

# 设置背景颜色
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
style.pattern = pattern

# 设置边框
borders = xlwt.Borders()
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
style.borders = borders

# 应用样式
sheet.write(0, 0, '带样式的标题', style)

常用样式设置速查:

样式类型 属性 常用值
字体 bold, italic, underline True/False
对齐 alignment.horz xlwt.Alignment.HORZ_CENTER
边框 borders.left/right/top/bottom xlwt.Borders.THIN/MEDIUM/THICK
背景色 pattern.pattern_fore_colour xlwt.Style.colour_map中的颜色名

多工作表操作

实际应用中经常需要操作多个工作表:

# 创建多个工作表
summary_sheet = workbook.add_sheet('汇总')
details_sheet = workbook.add_sheet('明细')

# 在汇总表写入标题
summary_sheet.write(0, 0, '部门月度汇总表')

# 在明细表写入标题
details_sheet.write(0, 0, '详细交易记录')

# 在多个工作表之间共享数据
departments = ['技术部', '市场部', '财务部', '人力资源部']

# 写入汇总表
for i, dept in enumerate(departments):
    summary_sheet.write(i+1, 0, dept)
    summary_sheet.write(i+1, 1, 0)  # 初始化为0

# 写入明细表
details_sheet.write(1, 0, '2023-06-01')
details_sheet.write(1, 1, '技术部')
details_sheet.write(1, 2, 15000)

保存Excel文件

完成所有操作后,使用save()方法保存工作簿:

# 保存为.xls文件
workbook.save('公司数据.xls')

完整示例:

import xlwt
import datetime

# 创建工作簿
workbook = xlwt.Workbook(encoding='utf-8')

# 添加工作表
employee_sheet = workbook.add_sheet('员工信息')
department_sheet = workbook.add_sheet('部门信息')

# 设置日期格式
date_style = xlwt.XFStyle()
date_style.num_format_str = 'YYYY-MM-DD'

# 向员工表写入数据
headers = ['ID', '姓名', '入职日期', '工资']
for col, header in enumerate(headers):
    employee_sheet.write(0, col, header, xlwt.easyxf('font: bold on'))
    
employees = [
    [1, '张三', datetime.date(2020, 5, 15), 15000],
    [2, '李四', datetime.date(2019, 8, 22), 13800],
    [3, '王五', datetime.date(2021, 3, 10), 12500],
]

for row, emp in enumerate(employees, start=1):
    for col, value in enumerate(emp):
        if isinstance(value, datetime.date):
            employee_sheet.write(row, col, value, date_style)
        else:
            employee_sheet.write(row, col, value)

# 向部门表写入数据
department_sheet.write(0, 0, '部门ID')
department_sheet.write(0, 1, '部门名称')
department_sheet.write(1, 0, 101)
department_sheet.write(1, 1, '技术研发部')
department_sheet.write(2, 0, 102)
department_sheet.write(2, 1, '市场运营部')

# 保存文件
workbook.save('company_data.xls')
print("Excel文件已成功生成!")

xlwt的局限性

虽然xlwt非常实用,但也有一些限制需要注意:

  • 仅支持.xls格式(Excel 97-2003),不支持.xlsx
  • 最大行数限制为65536行,最大列数限制为256列
  • 无法读取或修改现有Excel文件
  • 不支持Excel的某些高级功能(如图表、数据透视表等)

替代方案: 如果需要处理.xlsx文件或需要更多功能,可以考虑以下库:

  • openpyxl - 读写.xlsx文件
  • xlsxwriter - 创建.xlsx文件(功能丰富)
  • pandas - 高级数据处理,内置Excel读写功能

总结

本教程详细介绍了如何使用Python的xlwt库访问和操作Excel工作表,包括:

  1. 创建和访问工作表的多种方法
  2. 向工作表写入不同类型的数据
  3. 设置单元格样式以美化输出
  4. 多工作表操作技巧
  5. 保存最终Excel文件

xlwt是处理.xls格式文件的强大工具,虽然有一些限制,但对于基本的Excel文件生成需求来说,它仍然是一个简单高效的选择。

发表评论