Openpyxl 学习笔记

一、Openpyxl介绍

Openpyxl是一个用于处理Excel文件的Python库,可以读取、写入、修改Excel文件。
官方文档介绍:openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.1.2 documentation

在学习openpyxl之前,我们来对比下OpenpyxlPandas的优势:

  • Openpyxl是一个专门用于处理Excel文件的库,它提供了一些API用于读取、写入、修改Excel文件,并支持Excel的各种特性,如图表、数据透视表等。而Pandas则是一个用于数据分析和处理的库,它可以从多种数据源中读取数据(包括Excel文件),并提供了丰富的数据操作和分析功能。
  • Openpyxl读取和写入Excel文件时速度比Pandas更快,但Pandas的处理和分析大量数据时更加高效。

如果您只需要读取和写入Excel文件,并对Excel的一些特殊格式进行处理,那么Openpyxl是一个不错的选择。
如果需要对数据进行处理和分析,并且数据源不仅限于Excel文件,那么Pandas则是一个更好的选择。

二、Openpyxl基本操作

1.安装openpyxl

pip install openpyxl
import openpyxl

2.Sheet增删改查

from openpyxl import load_workbook
from openpyxl import Workbook 
#创建工作簿对象
workbook = Workbook()
# 加载工作簿
workbook = load_workbook('example.xlsx')

# 默认第一个sheet为active
first_sheet = workbook.active 

# 获取第二个Sheet
second_sheet = workbook.worksheets[1]
#worksheets属性是一个列表,包含了工作簿中所有的Sheet,默认第一个索引值为0,第二个Sheet的索引值则为1。  
            
#也可以手动指定sheet的名称来操作sheet
ws1 = wb["IP_Address"]   
ws2 = wb["ACL_DESC"]

例如,我们要循环查询所有的sheet对应的名称:

from openpyxl import load_workbook

# 加载工作簿
workbook = load_workbook('example.xlsx')

# 遍历所有的Sheet
for sheet in workbook.worksheets:
    print(f"Sheet名称:{sheet.title}")


修改sheet的名称:

from openpyxl import load_workbook

# 加载工作簿
workbook = load_workbook('example.xlsx')

# 获取要修改的Sheet
sheet = workbook['Sheet1']

# 修改Sheet的名称
sheet.title = 'New Name'

# 保存修改后的工作簿
workbook.save('example.xlsx')

3.单元格的增删改查
要读取Openpyxl工作簿中单元格的值,可以使用cell()方法。cell()方法接受两个参数,分别是单元格的行号和列号,返回对应单元格的值。例如:

from openpyxl import load_workbook

# 加载工作簿
workbook = load_workbook('example.xlsx')

# 获取Sheet
sheet = workbook['Sheet1']

# 读取单元格的值
value = sheet.cell(row=1, column=1).value
print(value)
#使用cell()方法读取第1行、第1列单元格的值。

要写入Openpyxl工作簿中单元格的值,可以使用cell()方法。cell()方法接受两个参数,分别是单元格的行号和列号,可以使用赋值操作写入单元格的值。例如:


from openpyxl import load_workbook

# 加载工作簿
workbook = load_workbook('example.xlsx')

# 获取Sheet
sheet = workbook['Sheet1']

# 写入单元格的值
sheet.cell(row=1, column=1, value='Hello')

# 保存修改后的工作簿
workbook.save('example.xlsx')
#使用cell()方法写入第1行、第1列单元格的值为Hello。最后使用save()方法将修改后的工作簿保存回原文件。

在openpyxl中,可以使用insert_cols()和insert_rows()方法来插入单元格,使用delete_cols()和delete_rows()方法来删除单元格。

插入行以及列:

from openpyxl import Workbook

# 创建一个新的工作簿
wb = Workbook()

# 选择一个工作表
ws = wb.active

# 在第2列之后插入2列
ws.insert_cols(2, amount=2)

# 将数据写入新的单元格
ws['B1'] = 'New Column 1'
ws['C1'] = 'New Column 2'

# 将数据写入新的单元格
ws['A2'] = 'New Row 1'
ws['A3'] = 'New Row 2'
# 保存工作簿
wb.save('example.xlsx')

删除行以及列:

from openpyxl import load_workbook

# 加载现有的工作簿
wb = load_workbook('example.xlsx')

# 选择一个工作表
ws = wb.active

# 删除第2行
ws.delete_rows(2)

# 删除第2列
ws.delete_cols(2)

# 保存工作簿
wb.save('example.xlsx')

4.字体以及颜色的设置:

作者:小网工
链接:https://zhuanlan.zhihu.com/p/613708574
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side

# 创建一个新的工作簿
wb = Workbook()

# 选择要写入数据的工作表
ws = wb.active

# 向单元格写入数据
ws['A1'] = 'Hello, World!'

# 设置单元格的字体
font = Font(name='Arial', size=16, bold=True, italic=False, underline='none', color='FF0000')
ws['A1'].font = font

# 设置单元格的对齐方式
alignment = Alignment(horizontal='center', vertical='center', wrap_text=False)
ws['A1'].alignment = alignment

# 设置单元格的边框
border = Border(left=Side(style='thin', color='000000'), 
                right=Side(style='thin', color='000000'), 
                top=Side(style='thin', color='000000'), 
                bottom=Side(style='thin', color='000000'))
ws['A1'].border = border

# 保存工作簿
wb.save('example.xlsx')

三、循环遍历工作表:

可以使用workbook.worksheets属性来访问工作簿中的所有工作表,该属性返回一个工作表对象列表。可以使用for循环遍历所有工作表,并使用title属性来访问每个工作表的名称。可以使用ws.max_row和ws.max_column属性来获取工作表中的最大行数和最大列数。

from openpyxl import load_workbook

# 加载现有的工作簿
wb = load_workbook('example.xlsx')

# 遍历所有工作表
for ws in wb.worksheets:
    # 打印工作表的名称
    print(f"工作表名称:{ws.title}")
    
    # 打印工作表的数据范围
    max_row = ws.max_row
    max_col = ws.max_column
    print(f"数据范围:A1:{ws.cell(row=max_row, column=max_col).coordinate}")

    # 打印每个单元格的值
    for row in ws.iter_rows(min_row=1, min_col=1, max_row=max_row, max_col=max_col):
        for cell in row:
            print(cell.value, end='\t')
        print()

四、给单元格以及字体上色:

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font

# 创建一个工作簿
wb = Workbook()

# 创建一个工作表
ws = wb.active

# 给单元格A1填充颜色
fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')
ws['A1'].fill = fill

# 给单元格B1字体填充颜色
font = Font(color='FF0000')
ws['B1'].font = font

# 保存工作簿
wb.save('example.xlsx')

五、单元格求值的其他方法

下面是一些常用的Worksheet类的方法和属性,它们可以用于对单元格区域进行聚合计算或获取单元格区域的信息:
使用max()min()方法来获取单元格区域内的最大值和最小值。
sum(range):计算单元格区域中数值类型单元格的和。
count(range):计算单元格区域中单元格的数量,包括空单元格和非空单元格。
average(range):计算单元格区域中数值类型单元格的平均值。
variance(range):计算单元格区域中数值类型单元格的方差。
这些方法接受一个单元格区域作为参数。例如,可以将单元格区域'A1:C3'传递给这些方法,以对该区域内的单元格进行聚合计算。

Worksheet类还有一些属性可以用于获取单元格区域的信息:

max_row:获取单元格区域中最大行号。
max_column:获取单元格区域中最大列号。
dimensions:获取单元格区域的维度,返回的是一个字符串表示,例如'A1:C3'。
这些属性可以通过在单元格区域上调用它们来使用,例如ws['A1:C3'].max_row。这些属性提供了获取单元格区域信息的快捷方式。

下面是一个例子,最大行号和最大列号 这两个遍历时比较常用。

from openpyxl import load_workbook

# 加载现有的工作簿
wb = load_workbook('example.xlsx')

# 获取第一个工作表
ws = wb.worksheets[0]

# 获取单元格区域内的最大值和最小值
max_value = ws['A1:C3'].max()
min_value = ws['A1:C3'].min()
# 计算单元格区域中数值类型单元格的和
total = ws.sum('A1:C3')
# 获取单元格区域的最大行号和最大列号
max_row = ws['A1:C3'].max_row
max_column = ws['A1:C3'].max_column

# 打印最大值和最小值
print(f"最大值:{max_value}")
print(f"最小值:{min_value}")
print(f"和:{total}")
# 打印最大行号和最大列号
print(f"最大行号:{max_row}")
print(f"最大列号:{max_column}")

你可能感兴趣的:(学习,笔记,python)