excel 操作之 openpyxl

一 相关说明:

1、openpyxl(可读写 excel 表)专门处理 Excel2007 及以上版本产生的 xlsx 文件;
2007 一下的版本为 xls 结尾的文件,需要使用 xlrd 和 xlwt 库进行操作
2、excel 表的文字编码如果是“gb2312” 读取后就会显示乱码,请先转成 Unicode
3、workbook: 工作簿,一个 excel 文件包含多个 sheet。
4、sheet:工作表,一个 workbook 有多个,表名识别,如“sheet1”,“sheet2”等。
5、cell: 单元格,存储数据对象。

openpyxl 官方文档

二、 openpyxl 的使用方法

1. 新建 excel

导入 openpyxl 库

import openpyxl

新建一个空 excel,表名为 sheet,文件名为 test

wb = openpyxl.Workbook()# 创建新的 excel 文件,一个工作簿 (workbook) 在创建的时候同时至少也新建了一张工作表(worksheet)
wb.save('openpyxl_test.xlsx')

2. 表操作

#注:从此操作往后都使用如下的测试数据

import openpyxl
import openpyxl.styles
`# ------------------ 表操作 ------------------`
# 打开已有的excel
wb = openpyxl.load_workbook(r"C:\Users\lwj\Desktop\报文950解析.xlsx")

# 新建sheet表
wb.create_sheet(index=2, title="sheet3")  # 可通过index控制创建的表的位置

# 获取所有表名
sheet_names = wb.sheetnames  # 得到工作簿的所有工作表名 结果: ['Sheet1', 'Sheet2', 'Sheet3']
print("获取所有表名",sheet_names

#根据表名删除sheet表
wb.remove(wb[sheet_names[1]])  # 删除上一步建的第3个工作表

# 根据表名打开sheet表
sheet1 = wb[sheet_names[0]]  # 打开第一个 sheet 工作表
ws = wb.active  # 获取当前活动的sheet页
ws.title = '950报文解析结果'

3. 读取数据

# 获取单元格数据
sheet1_max_colum = sheet1.max_column  # 获取最大列数 结果:3
print('获取最大列数:',sheet1_max_colum)
# ws = wb.active  # 获取当前活动的sheet页
sheet1_max_row = sheet1.max_row  # 获取最大行数 结果:10
print('获取最大行数:',sheet1_max_row)

A1_value = sheet1['A1'].value  # 获取单元格A1值 结果:a1
print("获取单元格A1的值",A1_value)
A1_column = sheet1['A1'].column  # 获取单元格A1列值 结果: A
print("获取单元格A1列值:",A1_column)
A1_row = sheet1['A1'].row   # 获取单元格A1行号 结果: 1
print("获取单元格A1行的值",A1_row)
A1 = sheet1.cell(row=1, column=1).value  # 获取第一行第一列的单元格值 结果:a1
print("获取行列值",A1)

# 获取C列的所有数据
list_sheet1_column_C = []
for i in sheet1["C"]:
    list_sheet1_column_C.append(i.value)
print("获取C列所有的值:",list_sheet1_column_C)

# 获取第1行的所有数据
list_sheet1_row_1 = []
for i in sheet1[1]:
    list_sheet1_row_1.append(i.value)
print("获取第1行所有的值:",list_sheet1_row_1)

# 读取所有数据
list_sheet1_all = []
for row in sheet1.rows:
    for cell in row:
        list_sheet1_all.append(cell.value)  # 按行循环获取所有的值,保存在 list_sheet1_all 列表中
print("获取所有的值:",list_sheet1_all)     #逐行读取数据

4. 写入数据

# ------------------ 表格样式调整 ------------------
# 表格样式支持:字体、颜色、模式、边框、数字格式等

# A1单元格 等线24号加粗斜体,字体颜色浅蓝色
sheet1["B11"].font = openpyxl.styles.Font(name="宋体", size=24, italic=True, color="00CCFF", bold=True)

# B1单元格 水平上下居中
sheet1["B11"].alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center")

# 第一行高度设置为30
sheet1.row_dimensions[1].height = 30

# C列的宽度设置为35
sheet1.column_dimensions["C"].width = 35


# 保存文件,注意文件打开时文件保存会出错
wb.save(r"C:\Users\lwj\Desktop\报文950解析.xlsx")