这篇教程python 对Excel 文档的基本操作写得很实用,希望能帮到您。
3. Excel 文档的基本操作
本章的例子将使用一个电子表格 example.xlsx,它保存在工程目录的 files 文件夹中。下图是 example.xlsx 文件内容截图,主要包含了默认的两个表:表1、表2
3.1 用 openpyxl 模块打开 Excel 文档
在导入 openpyxl 模块后,就可以使用openpyxl.load_workbook()函数来打开指定的 excel 文件:
- openpyxl.load_workbook(地址) - 打开现有的excel文件
- openpyxl.Workbook() - 新建一个excel文件
import openpyxl
# openpyxl.load_workbook(需要打开的excel文件路径)
wb = openpyxl.load_workbook('files/example.xlsx')
print(type(wb)) # 结果: <class 'openpyxl.workbook.workbook.Workbook'>
openpyxl.load_workbook()函数接受文件名,返回一个 workbook 数据类型的值。这 个 workbook 对象代表这个 Excel 文件,有点类似 File 对象代表一个打开的文本文件。
3.2 从工作簿中取得工作表
- 工作簿对象.sheetnames - 获取当前工作簿中所有表的名字
- 工作簿对象.active - 获取当前活动表对应的Worksheet对象
- 工作簿对象[表名] - 根据表名获取指定表对象
- 表对象.title - 获取表对象的表名
- 表对象.max_row - 获取表中最多有多少行
- 表对象.max_column - 获取表有多少列
import openpyxl
# 打开工作簿
wb = openpyxl.load_workbook('files/example.xlsx')
# 获取所有表的表名
sheets_names = wb.sheetnames
print(sheets_names) # 结果: ['表1', '表2']
# 获取活动表对应的表对象(表对象就是Worksheet类的对象)
active_sheet = wb.active
print(active_sheet) # 结果:<Worksheet "表1">
# 根据表名获取工作簿中指定的表
sheet2 = wb['表2']
print(sheet2) # 结果:<Worksheet "表2">
# 根据表对象获取表的名字
sheet_name1 = active_sheet.title
sheet_name2 = sheet2.title
print(sheet_name1, sheet_name2) # 结果:表1 表2
3.3 从表中取得单元格
获取到表以后,咱们可以通过表去获取表中的单元格:
- 表对象['列号行号'] - 获取指定列的指定行对应的单元格对象(单元格对象是 Cell 类的对象,列号是从A开始,行号是从1开始)
- 表对象.iter_rows() - 一行一行的取
- 表对象.iter_cols() - 列表一列的取
- 单元格对象.value - 获取单元格中的内容
- 单元格对象.row - 获取行号(数字1开始)
- 单元格对象.column - 获取列号(数字1开始)
- 单元格对象.coordinate - 获取位置(包括行号和列号)
import openpyxl
# 打开excel文件
wb = openpyxl.load_workbook('files/example.xlsx')
# 获取活跃表对象
sheet = wb.active
# 获取单元格对应的 Cell 对象
a1 = sheet['A1'] # A1 表示A列中的第一行,这儿的列号采用的是从A开始的
print(a1)
# 获取单元格中的内容
content = a1.value
print(content) # 结果是: Rank
# 获取单元格的行和列信息
row = a1.row
print('行:', row) # 结果: 1
column = a1.column
print('列:', column) # 结果: 1
coordinate = a1.coordinate
print(coordinate) # 结果:A1
用字母来指定列,这在程序中可能有点奇怪,特别是在 Z 列之后,列开始使用两个字母:AA、AB、AC 等。作为替代,在调用表的 cell()方法时,可以传入整数 作为 row 和 column 关键字参数,也可以得到一个单元格。第一行或第一列的整数 是 1,不是 0。
- 表对象.cell(行号, 列号) - 获取指定行指定列对应的单元格(这儿的行号和列好号都可以用数字)
# 获取第二列的所有内容
row_num = sheet.max_row # 获取当前表中最大的行数
for row in range(1, row_num+1):
cell = sheet.cell(row, 2)
print(cell.value)
'''
结果:
Language
Python
Java
C
C++
R
JavaScript
C#
Matlab
Swift
Go
'''
3.4 从表中取得行和列
咱们的表对象可以想列表或者字符串那样进行切片操作,来获取电子表格中一行、一列或一个矩形区域中的所有 Cell 对象。具体的用法如下:
- 表对象[位置1:位置2] - 获取指定范围中的所有的单元格
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
# 打开excel文件
wb = openpyxl.load_workbook('files/example.xlsx')
# 获取表
sheet = wb.active
# 1.获取整个一行的单元格
max_column = sheet.max_column # 获取最大列数
column = get_column_letter(max_column) # 获取最大列数对应的字母列号
# 获取第一行所有单元格对象
row2 = sheet['A1':'%s1' % column] # ((<Cell '表1'.A1>, <Cell '表1'.B1>, <Cell '表1'.C1>),)
for row_cells in row2:
for cell in row_cells:
print(cell.coordinate, cell.value)
# 获取整个列的单元格
max_row = sheet.max_row
columnB = sheet['A1':'A%d' % max_row]
# 获取B列对应的所有单元格对象
for column_cells in columnB:
for cell in column_cells:
print(cell.coordinate, cell.value)
# 获取矩形区域中的单元格对象
cell_tuples = sheet['A1': 'C3']
for cells in cell_tuples:
for cell in cells:
print(cell.coordinate, cell.value)
Python批量处理csv文件转Excel--xlsx文件 csv逗号分隔符转换 python导入xlsx转为csv python提出csv中数据 如何将csv文件处理成rdf文件 |