Skip to content

openpyxl

1.安装

pip install openpyxl
pip install lxml

2.打开与保存

新建

from openpyxl import Workbook

# 新建Excel
wb = Workbook()
# 保存
wb.save('./wb.xlsx')

保存

import os.path
from openpyxl import Workbook
wb = Workbook()

path = "./excel_ files/aa"  # 不包含文件名的文件路径
file_name = "test.xlsx"  # 文件名
file_path = os.path.join(path,file_name)  # 拼接文件路径和文件名
print( file_path)  # 输出:./excel_ files\test.xlsx

# 如果文件路径不存在则新建
if not os.path.exists(path):
    os.makedirs(path)
wb.save( file_path)

打开工作簿

# 打开工作簿
from openpyxl import load_workbook

lw = load_workbook('discipline.xlsx')

3.操作工作表

from openpyxl import Workbook, load_workbook


def hr():
    print("_" * 100)


# 1获取默认工作表
wb = Workbook()
ws = wb.active
print(type(ws), ws)
hr()

# 2工作表属性
lwb = load_workbook('discipline.xlsx')

# 获取第一张表
ws = lwb.active
print(ws.title)

# 修改 sheet 名
# ws.title = '计算机科学与技术'
# print(ws.title)

# 保存
# lwb.save('discipline.xlsx')

# 最大行数
print(ws.max_row)

# 最大列数
print(ws.max_column)

# 使用的矩阵范围
print(ws.dimensions)

# 编码类型
print(ws.encoding)
hr()

# 3获取工作表
# 获取表名
print(lwb.sheetnames)

# 通过表名获取工作表
s1 = lwb['计算机科学与技术']
print(s1.title)
hr()

# 4新建工作表
wb1 = load_workbook('wb.xlsx')
print(wb1.sheetnames)
new_sheet1 = wb1.create_sheet('NewSheet1', 0)
new_sheet2 = wb1.create_sheet('NewSheet2')
print(f'wb1.sheetnames:{wb1.sheetnames}')
print(new_sheet1.title)
print(new_sheet2.title)
hr()

# 5删除工作表
wb1.remove(new_sheet1)
print(wb1.sheetnames)


# 6移动工作表
Workbook().move_sheet("Sheet1", -1)

# 7复制工作表
Workbook().copy_worksheet(wb.active)

4.访问单元格

from openpyxl import Workbook, load_workbook
from openpyxl.utils import rows_from_range
import pprint


def hr():
    print("_" * 100)


# 1获取单个单元格
wb = Workbook()
ws = wb.active

cell1 = ws["a6"]  # 通过坐标获取
cell2 = ws.cell(1, 2)  # 通过行列下标获取
cell3 = ws.cell(2, 5, "test value")  # 通过行列下标获取
print(type(cell1))  # 输出:<class 'openpyxl.cell.cell.Cell'>
print(type(cell2))  # 输出:<class 'openpyxl.cell.cell.Cell'>
print(type(cell3))  # 输出:<class 'openpyxl.cell.cell.Cell'>

# 2单元格属性
# 3修改单元格
# from openpyxl import Workbook
# wb = Workbook()
# ws = wb.active
# i = 1
# for x in range(1,11):
#     for y in range(1,21):
#          ws.cell(x,y,i)
#          i += 1
# wb.save("test.xlsx")

hr()
# 4获取多个单元格
wb = load_workbook('test.xlsx')
ws = wb.active
# 选取第2行(下标从1开始),返回一个元祖
row_cells = ws[2]
print(row_cells)

# 选取A列,返回一个元组
col_cells = ws['B']
print(col_cells)

# 选取2、3、4行
rows_range_cells = ws[2:4]
print(rows_range_cells)

# 选取B、C、D共3列
col_range_cells = ws["B:D"]
# pprint.pprint(col_range_cells)
print(col_range_cells)

# 选取c3到f6区域
range_cells = ws["c3:f6"]
print(range_cells)

hr()
from openpyxl.utils import get_column_letter, column_index_from_string

# 数字转字母
col_letter = get_column_letter(1)
print(col_letter)

# 字母转数字
col_idx = column_index_from_string(col_letter)
print(col_idx)
hr()
wb = load_workbook('test.xlsx')
ws = wb.active
# 前4个参数分别是最小列、最大列、最小行、最大行,
cells = ws.iter_rows(min_col=2, max_col=5, min_row=1, max_row=3)
for cell in cells:
    print(cell)

# 第5个参数是values_only,表示是否只取值
cells = ws.iter_rows(min_col=2, max_col=5, min_row=1, max_row=3, values_only=True)
for cell in cells:
    print(cell)

#
for cells in ws.rows:
    print(cells)
hr()
for cells in ws.columns:
    print(cells)
hr()
for rows in ws.values:
    for value in rows:
        print(value)

5.操作单元格

6.使用公式

7.设置样式

8.过滤和排序

9.插入图表

10.只读只写

11.加密保护

12.xls转xlsx