python.openpyxl

下载和导包

pip install openpyxl

import openpyxl

导入将字母转换成数字,将数字转换成字母的包
from openpyxl.utils import get_column_letter,column_index_from_string

名词概念

工作薄(workbook)
表单(worksheet)
行、列、单元格(row、column、cell)

创建和打开EXCEL文件

# 创建一个excel文件,创建和打开不同,创建最后需要保存
wb = openpyxl.Workbook()
wb.save("test.xlsx")
# 打开一个excel文件
wb = openpyxl.load_workbook(文件路径)

EXCEL里表单的操作

以下所有操作都是基于打开或者创建一个excel文件之后的操作:

wb = openpyxl.load_workbook(文件路径)
方法 应用场景 使用案例 运行结果
.create_sheet() 创建表单 wb.create_sheet("leesin") or (index=5,title='leesin') 添加名为“leesin”新表单 or 创建为第五页表单
.remove_sheet() 删除表单 wb.remove_sheet(wb.get_sheet_by_name('表单名')) 删除该表单
.sheetnames 读取中所有表单名称 print(wb.sheetnames) 返回包含所有表单名称的list
.get_sheet_by_name() 获取指定名称的表单 ws = wb.get_sheet_by_name("表单名称") 将指定名称的表单赋值给ws
.active 获取当前表单 ws = wb.active 将当前工作表单赋值给ws
.title 获取和更改当前活动表单的名称 print(ws.title) or ws.title=“test1” 返回当前表单的名称:test or 更改当前表单的名称为:test1
.row 获取行数 print(sheet["B1"].row) 打印B1所在的行数:1
.column 获取列数 print(sheet["B1"].column) 打印B1所在的列数:2
.coordinate 获取坐标 print(sheet["B1"].coordinate) 打印B1的坐标:B1
.value 获取值或者赋值 print(sheet["B1"].value) 打印B1的值:B1
.cell 根据行、列定位坐标#.cell(row,column) print(sheet.cell(1,2).value) 返回地一行第二列的值:B1

.rows 按行获取数值,将每行所有的值返回为元祖格式

for row in sheet.rows:
	print(row)
(<Cell 'test'.A1>, <Cell 'test'.B1>, <Cell 'test'.C1>, <Cell 'test'.D1>, <Cell 'test'.E1>, <Cell 'test'.F1>)
(<Cell 'test'.A2>, <Cell 'test'.B2>, <Cell 'test'.C2>, <Cell 'test'.D2>, <Cell 'test'.E2>, <Cell 'test'.F2>)
(<Cell 'test'.A3>, <Cell 'test'.B3>, <Cell 'test'.C3>, <Cell 'test'.D3>, <Cell 'test'.E3>, <Cell 'test'.F3>)
(<Cell 'test'.A4>, <Cell 'test'.B4>, <Cell 'test'.C4>, <Cell 'test'.D4>, <Cell 'test'.E4>, <Cell 'test'.F4>)
(<Cell 'test'.A5>, <Cell 'test'.B5>, <Cell 'test'.C5>, <Cell 'test'.D5>, <Cell 'test'.E5>, <Cell 'test'.F5>)
(<Cell 'test'.A6>, <Cell 'test'.B6>, <Cell 'test'.C6>, <Cell 'test'.D6>, <Cell 'test'.E6>, <Cell 'test'.F6>)
(<Cell 'test'.A7>, <Cell 'test'.B7>, <Cell 'test'.C7>, <Cell 'test'.D7>, <Cell 'test'.E7>, <Cell 'test'.F7>)
(<Cell 'test'.A8>, <Cell 'test'.B8>, <Cell 'test'.C8>, <Cell 'test'.D8>, <Cell 'test'.E8>, <Cell 'test'.F8>)
(<Cell 'test'.A9>, <Cell 'test'.B9>, <Cell 'test'.C9>, <Cell 'test'.D9>, <Cell 'test'.E9>, <Cell 'test'.F9>)

.columns 按列获取数值,将每列所有的值返回为元祖格式

for col in sheet.columns:
	print(col)
返回数据
 
A1
A2
A3
A4
A5
A6
A7
A8
A9
B1
B2
B3
B4
B5
B6
B7
B8
B9
C1
C2
C3
C4
C5
C6
C7
C8
C9
D1
D2
D3
D4
D5
D6
D7
D8
D9
E1
E2
E3
E4
E5
E6
E7
E8
E9
F1
F2
F3
F4
F5
F6
F7
F8
F9
  

设置单元格样式

单元格样式主要包括字体、边框、颜色以及对齐方式等,这些均位于openpyxl.styles库中

# 导入字体、边框、颜色以及对齐方式相关库from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment

字体通过sheet单元格font属性设置字体风格

通过sheet单元格font属性设置字体风格

# 设置字体风格为Times New Roman,大小为16,粗体、斜体,颜色蓝色
sheet['A1'].font = Font(name='Times New Roman', size=16, bold=True, italic=True, color=colors.BLUE)

对齐方式

通过sheet单元格alignment属性设置文本对齐风格

# 通过参数horizontal和vertical来设置文字在单元格里的对齐方式,此外设置值还可为left和right
sheet['B1'].alignment = Alignment(horizontal='center',vertical='center')

边框

通过sheet单元格border属性设置字体风格

# 首先设置边框四个方向的线条种类
left, right, top, bottom = [Side(style='thin', color='000000')] * 4
# 再将各方向线条作为参数传入Border方法
sheet['C1'].border = Border(left=left, right=right, top=top, bottom=bottom)

设置行高和列宽

行和列的长度大小可以通过row_dimensions[序号].height和column_dimensions[标号].width来设置

# 设置行高
sheet.row_dimensions[1].height = 25

# 设置列宽
sheet.column_dimensions['D'].width = 15.5

合并和拆分单元格

对单元格的合并与拆分,主要是通过sheet的merge_cells(args1:args2)和unmerge_cells(args1:args2)两个方法来实现的

# 合并单元格
sheet.merge_cells('A1:B2')

# 拆分单元格
sheet.unmerge_cells('A1:B2')
原文地址:https://www.cnblogs.com/youngleesin/p/11435611.html