在 Python 中使用第三方库来操作电子表格文件
在 Python 中操作电子表格文件(如 Excel)通常会使用第三方库,以下是几种常见场景和对应库的使用方法:
1. 使用 pandas
进行基础操作
适用场景:快速处理数据、导出/导入表格。
安装:pip install pandas openpyxl
(openpyxl 用于处理 .xlsx
文件)
import pandas as pd
# 创建数据
data = {
'姓名': ['张三', '李四'],
'年龄': [20, 21],
'成绩': [85.5, 90.0]
}
# 创建 DataFrame
df = pd.DataFrame(data)
# 导出到 Excel
df.to_excel('students.xlsx', index=False, sheet_name='学生信息')
# 从 Excel 读取
df_read = pd.read_excel('students.xlsx')
print(df_read)
特点:
- 简单易用,适合数据分析。
- 自动处理表头和索引。
- 支持多种格式:CSV、Excel、JSON 等。
2. 使用 openpyxl
进行高级 Excel 操作
适用场景:复杂格式设置、公式计算、图表生成。
安装:pip install openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "学生信息"
# 设置表头
headers = ["序号", "姓名", "年龄", "成绩"]
ws.append(headers)
# 设置表头样式
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal="center")
# 添加数据
students = [
(1, "张三", 20, 85.5),
(2, "李四", 21, 90.0)
]
for row in students:
ws.append(row)
# 设置列宽
for col_letter in ['A', 'B', 'C', 'D']:
ws.column_dimensions[col_letter].width = 15
# 添加公式(计算平均成绩)
ws['E1'] = "平均成绩"
ws['E2'] = "=AVERAGE(D2:D3)" # 计算平均成绩
# 保存文件
wb.save("students_advanced.xlsx")
特点:
- 直接操作 Excel 对象(工作表、单元格、样式)。
- 支持公式、图表、条件格式等高级功能。
- 适合需要精细控制 Excel 文件的场景。
3. 使用 xlwings
连接 Python 与 Excel
适用场景:与打开的 Excel 文件交互、自动化操作。
安装:pip install xlwings
import xlwings as xw
# 连接到 Excel(打开或新建)
wb = xw.Book()
sheet = wb.sheets[0]
# 写入数据
sheet.range('A1').value = [
["姓名", "年龄", "成绩"],
["张三", 20, 85.5],
["李四", 21, 90.0]
]
# 读取数据
data = sheet.range('A1:C3').value
print(data)
# 保存并关闭
wb.save("students_xlwings.xlsx")
wb.close()
特点:
- 可以操作正在运行的 Excel 实例。
- 支持 VBA 宏和 Excel 函数。
- 适合需要实时交互的场景(如数据可视化)。
4. 使用 xlrd
和 xlwt
(旧版 Excel 文件)
适用场景:处理 .xls
格式文件。
安装:pip install xlrd xlwt
import xlwt
import xlrd
# 写入 .xls 文件
wb = xlwt.Workbook()
sheet = wb.add_sheet('Sheet1')
sheet.write(0, 0, '姓名')
sheet.write(0, 1, '年龄')
sheet.write(1, 0, '张三')
sheet.write(1, 1, 20)
wb.save('students_old.xls')
# 读取 .xls 文件
wb_read = xlrd.open_workbook('students_old.xls')
sheet = wb_read.sheet_by_index(0)
print(sheet.cell_value(1, 0)) # 输出:张三
注意:
xlrd
从 2.0.0 版本起不再支持.xlsx
,需使用openpyxl
。
选择建议
- 快速导出/导入:用
pandas
。 - 复杂格式/公式:用
openpyxl
。 - 实时交互/自动化:用
xlwings
。 - 旧版
.xls
文件:用xlrd
和xlwt
。
常见操作对比
功能 | pandas | openpyxl | xlwings |
---|---|---|---|
读取数据 | pd.read_excel() |
遍历单元格 | sheet.range().value |
写入数据 | df.to_excel() |
sheet.cell().value |
sheet.range().value |
设置样式 | 有限支持 | 完全支持 | 完全支持 |
公式计算 | 需手动写入 | sheet['A1'] = '=SUM(B1:B10)' |
支持 Excel 函数 |
图表生成 | 需配合 matplotlib | 支持 | 支持 |
根据具体需求选择合适的库,可以大幅提高电子表格处理效率!