目录
3-26、openpyxl.worksheet.worksheet.Worksheet.insert_rows函数
3-27、openpyxl.worksheet.worksheet.Worksheet.iter_cols函数
3-28、openpyxl.worksheet.worksheet.Worksheet.iter_rows函数
3-29、openpyxl.worksheet.worksheet.Worksheet.merge_cells函数
3-30、openpyxl.worksheet.worksheet.Worksheet.move_range函数
一、 openpyxl库的由来
openpyxl库的由来可以总结为以下几点:
1、背景
在openpyxl库诞生之前,Python中缺乏一个专门用于读取和编写Office Open XML格式(如Excel 2010及更高版本的.xlsx文件)的库。
2、起源
openpyxl库的创建是为了解决上述提到的Python在处理Excel文件时的不足,它的开发受到了PHPExcel团队的启发,因为openpyxl最初是基于PHPExcel的。
3、发展
随着时间的推移,openpyxl逐渐发展成为一个功能强大的Python库,专门用于处理Excel文件。它支持Excel 2010及更高版本的文件格式,并提供了丰富的API,用于读取、写入、修改Excel文件。
4、特点
4-1、支持.xlsx格式
openpyxl主要用于处理Excel 2010及更新版本的.xlsx文件。
4-2、读写Excel文件
使用openpyxl可以读取现有的Excel文件,获取数据,修改数据,并保存到新的文件中。
4-3、操作单元格
openpyxl允许用户按行、列或具体的单元格进行数据的读取和写入。
4-4、创建和修改工作表
用户可以创建新的工作表,复制和删除现有的工作表,设置工作表的属性等。
4-5、样式设置
openpyxl支持设置单元格的字体、颜色、边框等样式。
4-6、图表和公式
用户可以通过openpyxl创建图表、添加公式等。
4-7、支持数字和日期格式
openpyxl能够正确处理数字和日期格式,确保在Excel中显示正确的格式。
综上所述,openpyxl库的出现填补了Python在处理Excel文件时的空白,经过不断的发展和完善,成为了一个功能丰富、易于使用的Python库。
二、openpyxl库的优缺点
openpyxl库是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,它基于Python,并且对于处理Excel文件提供了很多便利的功能,其主要优缺点有:
1、优点
1-1、支持现代Excel格式
openpyxl支持.xlsx格式的Excel文件,这是Excel 2010及更高版本使用的格式,也是目前广泛使用的格式。
1-2、功能丰富
openpyxl提供了创建、修改和保存Excel工作簿、工作表、单元格、图表、公式、图像等功能。
1-3、易于使用
openpyxl的API设计得相对直观,使得Python开发者能够很容易地掌握和使用。
1-4、与Excel兼容性
openpyxl能够处理Excel文件中的很多复杂特性,如公式、样式、条件格式等,这确保了与Excel的良好兼容性。
1-5、性能良好
在处理大型Excel文件时,openpyxl通常能够保持较好的性能。
1-6、社区支持
openpyxl是一个开源项目,拥有活跃的社区支持和维护,这意味着开发者可以获得帮助和修复错误的快速响应。
1-7、跨平台
openpyxl可以在不同的操作系统上运行,包括Windows、Linux和macOS等。
2、缺点
2-1、不支持旧版格式
openpyxl不支持较旧的.xls格式(Excel 97-2003)。如果需要处理这种格式的文件,需要使用其他库如xlrd和xlwt(尽管这些库也面临一些兼容性和维护问题)。
2-2、某些特性支持有限
虽然openpyxl支持许多Excel特性,但可能对于某些高级或特定的Excel功能支持有限或不支持。
2-3、内存占用
在处理大型Excel文件时,openpyxl可能会占用较多的内存。这是因为openpyxl会将整个工作簿加载到内存中。
2-4、文档和示例可能不足
尽管openpyxl的文档相对完整,但对于某些高级功能或特定用例,可能缺乏足够的示例或详细解释。
2-5、依赖关系
openpyxl依赖于lxml和et_xmlfile这两个Python库来处理XML和Excel文件,在某些环境中,可能需要额外安装这些依赖项。
2-6、学习曲线
虽然openpyxl的API设计得相对直观,但对于初学者来说,可能需要一些时间来熟悉和掌握其用法。
三、openpyxl库的用途
openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它是用Python编写的,不需要Microsoft Excel,并且支持多种Excel数据类型,包括图表、图像、公式等,其主要用途有:
1、读取Excel文件
你可以使用openpyxl来读取 Excel 文件中的数据,如单元格值、工作表名称、公式等,它支持多种数据类型,如字符串、数字、日期等。
2、写入Excel文件
使用openpyxl,你可以创建新的Excel文件或向现有文件添加数据,你可以设置单元格的字体、颜色、边框等样式,你还可以添加图表、图像和其他复杂的Excel功能。
3、修改Excel文件
你可以使用openpyxl来修改现有的Excel文件,如更改单元格值、添加或删除工作表等,这对于自动化数据处理和报告生成非常有用。
4、自动化
openpyxl可以与其他Python库和框架(如 pandas、numpy、matplotlib 等)结合使用,以自动化数据处理和分析任务。你可以编写脚本来从多个数据源收集数据,将数据整合到 Excel 文件中,并执行各种数据分析任务。
5、与Excel交互
如果你正在开发需要与Excel交互的应用程序或工具,openpyxl可以提供一个强大的API来处理Excel文件,它允许你读取和写入Excel文件,而无需依赖Microsoft Excel或其他第三方库。
6、数据迁移和转换
使用openpyxl,你可以轻松地将数据从Excel文件迁移到其他数据库或文件格式,或将其他数据源的数据导入到Excel文件中。
7、创建模板化的报告
你可以使用openpyxl来创建模板化的Excel报告,并在需要时填充数据,这对于需要定期生成具有一致格式和布局的报告的场景非常有用。
总之,openpyxl是一个功能强大的库,可用于在Python中处理Excel文件,它提供了灵活的API来读取、写入、修改和自动化Excel文件的各个方面。
四、如何学好openpyxl库?
1、获取openpyxl库的属性和方法
用print()和dir()两个函数获取openpyxl库所有属性和方法的列表
# ['DEBUG', 'DEFUSEDXML', 'LXML', 'NUMPY', 'Workbook', '__author__', '__author_email__', '__builtins__', '__cached__',
# '__doc__', '__file__', '__license__', '__loader__', '__maintainer_email__', '__name__', '__package__', '__path__',
# '__spec__', '__url__', '__version__', '_constants', 'cell', 'chart', 'chartsheet', 'comments', 'compat', 'constants',
# 'descriptors', 'drawing', 'formatting', 'formula', 'load_workbook', 'open', 'packaging', 'pivot', 'reader', 'styles',
# 'utils', 'workbook', 'worksheet', 'writer', 'xml']
2、获取openpyxl库的帮助信息
用help()函数获取openpyxl库的帮助信息
Help on package openpyxl:
NAME
openpyxl - # Copyright (c) 2010-2024 openpyxl
PACKAGE CONTENTS
_constants
cell (package)
chart (package)
chartsheet (package)
comments (package)
compat (package)
descriptors (package)
drawing (package)
formatting (package)
formula (package)
packaging (package)
pivot (package)
reader (package)
styles (package)
utils (package)
workbook (package)
worksheet (package)
writer (package)
xml (package)
SUBMODULES
constants
DATA
DEBUG = False
DEFUSEDXML = False
LXML = True
NUMPY = True
__author_email__ = 'charlie.clark@clark-consulting.eu'
__license__ = 'MIT'
__maintainer_email__ = 'openpyxl-users@googlegroups.com'
__url__ = 'https://openpyxl.readthedocs.io'
VERSION
3.1.3
AUTHOR
See AUTHORS
FILE
e:\python_workspace\pythonproject\lib\site-packages\openpyxl\__init__.py
3、用法精讲
3-26、openpyxl.worksheet.worksheet.Worksheet.insert_rows函数
3-26-1、语法
insert_rows(self, idx, amount=1)
Insert row or rows before row==idx
3-26-2、参数
3-26-2-1、self(必须):一个对实例对象本身的引用,在类的所有方法中都会自动传递。
3-26-2-2、idx(必须):一个整数类型,表示要插入行的位置索引(从1开始),即在第几行之前插入新行。
3-26-2-3、 amount(可选):一个整数类型,表示指定要插入的行数,默认为 1。如果插入多行,可以设置为大于1的整数。
3-26-3、功能
用于在指定位置插入一行或多行的函数。
3-26-4、返回值
没有返回值,但会直接修改工作表对象。
3-26-5、说明
无
3-26-6、用法
# 26、openpyxl.worksheet.worksheet.Worksheet.insert_rows函数
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 向工作表添加一些数据
ws['A1'] = 'Header1'
ws['B1'] = 'Header2'
ws['A2'] = 'Row 1'
ws['B2'] = 'Row 1 data'
ws['A3'] = 'Row 2'
ws['B3'] = 'Row 2 data'
# 在第2行之前插入3行
ws.insert_rows(2, 3)
# 保存工作簿
wb.save('inserted_rows.xlsx')
3-27、openpyxl.worksheet.worksheet.Worksheet.iter_cols函数
3-27-1、语法
iter_cols(self, min_col=None, max_col=None, min_row=None, max_row=None, values_only=False)
Produces cells from the worksheet, by column. Specify the iteration range
using indices of rows and columns.
If no indices are specified the range starts at A1.
If no cells are in the worksheet an empty tuple will be returned.
:param min_col: smallest column index (1-based index)
:type min_col: int
:param min_row: smallest row index (1-based index)
:type min_row: int
:param max_col: largest column index (1-based index)
:type max_col: int
:param max_row: largest row index (1-based index)
:type max_row: int
:param values_only: whether only cell values should be returned
:type values_only: bool
:rtype: generator
3-27-2、参数
3-27-2-1、self(必须):一个对实例对象本身的引用,在类的所有方法中都会自动传递。
3-27-2-2、min_col(可选):一个整数类型(默认值为None),表示要遍历的最左列索引。
3-27-2-3、max_col(可选):一个整数类型(默认值为None),表示要遍历的最右列索引。
3-27-2-4、min_row(可选):一个整数类型(默认值为None),表示要遍历的起始行索引。
3-27-2-5、max_row(可选):一个整数类型(默认值为None),表示要遍历的结束行索引。
3-27-2-6、values_only(可选):一个布尔值(默认值为False),是否仅返回单元格的值而不是单元格对象。如果为True,仅返回单元格的值。
3-27-3、功能
用于遍历和获取工作表中的列数据的工具。
3-27-4、返回值
返回一个生成器,生成器每次迭代都会提供一个元组,该元组包含指定范围内的每一列的单元格或单元格的值。
3-27-5、说明
该函数的应用场景有:
3-27-5-1、遍历大数据量的列时,提高内存和性能效率。
3-27-5-2、仅处理或查看单元格的值而不是单元格对象。
3-27-5-3、按列遍历而非按行遍历工作表的数据。
3-27-6、用法
# 27、openpyxl.worksheet.worksheet.Worksheet.iter_cols函数
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 向工作表添加一些数据
ws['A1'] = 'Header1'
ws['B1'] = 'Header2'
ws['A2'] = 'Row 1'
ws['B2'] = 'Row 1 data'
ws['A3'] = 'Row 2'
ws['B3'] = 'Row 2 data'
ws['A4'] = 'Row 3'
ws['B4'] = 'Row 3 data'
# 使用 iter_cols 遍历列
for col in ws.iter_cols(min_row=1, max_row=4, min_col=1, max_col=2, values_only=True):
for cell in col:
print(cell)
3-28、openpyxl.worksheet.worksheet.Worksheet.iter_rows函数
3-28-1、语法
iter_rows(self, min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
Produces cells from the worksheet, by row. Specify the iteration range
using indices of rows and columns.
If no indices are specified the range starts at A1.
If no cells are in the worksheet an empty tuple will be returned.
:param min_col: smallest column index (1-based index)
:type min_col: int
:param min_row: smallest row index (1-based index)
:type min_row: int
:param max_col: largest column index (1-based index)
:type max_col: int
:param max_row: largest row index (1-based index)
:type max_row: int
:param values_only: whether only cell values should be returned
:type values_only: bool
:rtype: generator
3-28-2、参数
3-28-2-1、self(必须):一个对实例对象本身的引用,在类的所有方法中都会自动传递。
3-28-2-2、min_row(可选):一个整数类型(默认值为None),表示要遍历的起始行索引。
3-28-2-3、max_row(可选):一个整数类型(默认值为None),表示要遍历的结束行索引。
3-28-2-4、min_col(可选):一个整数类型(默认值为None),表示要遍历的最左列索引。
3-28-2-5、max_col(可选):一个整数类型(默认值为None),表示要遍历的最右列索引。
3-27-2-6、values_only(可选):一个布尔值(默认值为False),是否仅返回单元格的值而不是单元格对象。如果为True,仅返回单元格的值。
3-28-3、功能
用于遍历和获取工作表中的行数据的工具。
3-28-4、返回值
返回一个生成器,生成器每次迭代都会提供一个元组,该元组包含指定范围内的每一行的单元格或单元格的值。
3-28-5、说明
该函数的应用场景有:
3-28-5-1、遍历大数据量的行时,提高内存和性能效率。
3-28-5-2、仅处理或查看单元格的值而不是单元格对象。
3-28-5-3、按行遍历而非按列遍历工作表的数据。
3-28-6、用法
# 28、openpyxl.worksheet.worksheet.Worksheet.iter_rows函数
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 向工作表添加一些数据
ws['A1'] = 'Header1'
ws['B1'] = 'Header2'
ws['A2'] = 'Row 1'
ws['B2'] = 'Row 1 data'
ws['A3'] = 'Row 2'
ws['B3'] = 'Row 2 data'
ws['A4'] = 'Row 3'
ws['B4'] = 'Row 3 data'
# 使用 iter_rows 遍历行
for row in ws.iter_rows(min_row=1, max_row=4, min_col=1, max_col=2, values_only=True):
for cell in row:
print(cell)
3-29、openpyxl.worksheet.worksheet.Worksheet.merge_cells函数
3-29-1、语法
merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
Set merge on a cell range. Range is a cell range (e.g. A1:E1)
3-29-2、参数
3-29-2-1、self(必须):一个对实例对象本身的引用,在类的所有方法中都会自动传递。
3-29-2-2、range_string(可选):一个字符串,表示要合并的单元格范围。例如,"A1:D1" 表示从A1单元格到D1单元格的范围。
3-29-2-3、start_row(可选):一个整数(默认值为None),表示要合并的起始行索引。
3-29-2-4、start_column(可选):一个整数(默认值为None),表示要合并的起始列索引。
3-29-2-5、end_row(可选):一个整数(默认值为None),表示要合并的结束行索引。
3-29-2-6、end_column(可选):一个整数(默认值为None),表示要合并的结束列索引。
3-29-3、功能
用于在Excel工作表中合并单元格。
3-29-4、返回值
没有返回值,但会直接修改工作表。
3-29-5、说明
该函数的应用场景有:
3-29-5-1、创建报表或表格时需要将多个单元格合并以展示一个大标题。
3-29-5-2、需要合并单元格来突出显示某些数据或使布局更整洁。
3-29-6、用法
# 29、openpyxl.worksheet.worksheet.Worksheet.merge_cells函数
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 向工作表添加一些数据
ws['A1'] = 'Merged Cell'
# 合并单元格范围 A1:D1
ws.merge_cells('A1:D1')
# 或者使用起始和结束行列索引来合并单元格
ws.merge_cells(start_row=2, start_column=1, end_row=2, end_column=4)
# 保存工作簿
wb.save('merged_cells.xlsx')
3-30、openpyxl.worksheet.worksheet.Worksheet.move_range函数
3-30-1、语法
move_range(self, cell_range, rows=0, cols=0, translate=False)
Move a cell range by the number of rows and/or columns:
down if rows > 0 and up if rows < 0
right if cols > 0 and left if cols < 0
Existing cells will be overwritten.
Formulae and references will not be updated.
3-30-2、参数
3-30-2-1、self(必须):一个对实例对象本身的引用,在类的所有方法中都会自动传递。
3-30-2-2、cell_range(必须):一个字符串,表示要移动的单元格范围。例如,"A1:D1" 表示从A1单元格到D1单元格的范围。
3-30-2-3、 rows(可选):一个整数(默认值为0),表示指定移动目标位置的行偏移量。正数表示向下移动,负数表示向上移动。
3-30-2-4、 cols(可选):一个整数(默认值为0),表示指定移动目标位置的列偏移量。正数表示向右移动,负数表示向左移动。
3-30-2-5、 translate(可选):一个布尔值(默认值为True),表示是否自动更新引用(例如公式中的单元格引用)。如果为False,移动时不会更新引用。
3-30-3、功能
用于移动一个范围内的单元格到工作表中的新位置。
3-30-4、返回值
没有返回值,但会直接修改工作表。
3-30-5、说明
该函数的应用场景有:
3-30-5-1、需要重新排列或重组数据区域以适应工作表布局的变化。
3-30-5-2、自动化处理工作表数据时,通过移动单元格范围来动态调整数据位置。
3-30-6、用法
# 30、openpyxl.worksheet.worksheet.Worksheet.move_range函数
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 向工作表添加一些数据
ws['A1'] = 'Data 1'
ws['B1'] = 'Data 2'
ws['C1'] = 'Data 3'
ws['D1'] = 'Data 4'
# 打印移动前的数据
print("移动前:")
for row in ws.iter_rows(min_row=1, max_row=1, min_col=1, max_col=4):
for cell in row:
print(cell.value, end=" ")
print()
# 移动单元格范围 A1:D1 到新的位置(向下移动2行,向右移动1列)
ws.move_range("A1:D1", rows=2, cols=1)
# 打印移动后的数据
print("移动后:")
for row in ws.iter_rows(min_row=3, max_row=3, min_col=2, max_col=5):
for cell in row:
print(cell.value, end=" ")
print()
# 保存工作簿
wb.save('moved_cells.xlsx')