Python-Excel读写:openpyxl模块

  • 0 前言
  • 1 openpyxl模块(第三方库)
  • 2 Workbook
    • 2.1 Excel文件读写创建
    • 2.2 对Worksheet的操作
  • 3 Worksheet
    • 3.1 对标题、行列数的操作
    • 3.2 对行高列宽的操作
    • 3.3 按行或按列操作
      • 3.3.1 示例:按一行一列迭代
    • 3.4 对Cell的遍历和定位
      • 3.4.1 示例:用单元格名称切片迭代
      • 3.4.2 示例:按单元格行列号迭代
    • 3.5 对合并单元格的操作
  • 5 Cell
    • 5.1 单元格的值和坐标
      • 5.1.1 示例:新建文件
      • 5.1.2 示例 :编辑文件
      • 5.1.3 示例:读取文件
    • 5.2 单元格格式
      • 5.2.1 数字格式 number_format
      • 5.2.2 单元格对齐
      • 5.2.3 单元格字体 Font
      • 5.3.4 单元格边框样式 Side
      • 5.4.5 单元格填充样式 PatternFill
      • 5.4.6 单元格保护

0 前言

>>返回Python系列文章目录<<

xlrdxlwt模块分别用于读写excel文件,xlrd可以读xls和xlsx格式(对xlsx格式只能读取数据,不能读取字体颜色等信息),但是xlwt只能写xls格式

openpyxl库用于读写xlsx格式的数据和字体等信息,不支持xls格式

xlrdxlwt模块读写效率比openpyxl快一倍,但是要求单个sheet不能超过65535行,不超过256列。openpyxl支持任意大小的文件

xlrdxlwt模块对数据类型的定义不同,所以(xlrd+xlwt)没有办法打开一个已经存在的文件直接追加数据,但是openpyxl可以

1 openpyxl模块(第三方库)

openpyxl模块包含了几乎excel软件的所有功能,分成多个子模块。

模块安装方式如下:

pip install openpyxl

openpyxl包含中3种类型,WorkbookWorksheetCell,对应excel中的工作簿、工作表和单元格

进一步学习可参考以下博客:

Python自动化办公:openpyxl教程(基础).

Python自动化办公:openpyxl教程(进阶).

Python自动化办公:openpyxl绘制图表.

2 Workbook

类的地址是:

openpyxl.workbook.workbook.Workbook()

**Workbook()Worksheet()**按顺序排列。可以按sheet_name查找,也可以按sheet_index查找。sheet_index从0开始。

2.1 Excel文件读写创建

① 读取Excel文件为Workbook数据

from openpyxl import load_workbook
独立方法 说明
load_workbook(file) -> Workbook 读取xlsx文件,返回Workbook类

② 创建新的Workbook数据

wb = Workbook()

③ 保存Workbook数据

self=Workbook类 说明
self.save(file) 保存文件
file->字符串

2.2 对Worksheet的操作

self=Workbook类 说明
self.active -> Worksheet 读取当前激活的Worksheet,返回Worksheet类
self.create_sheet(sheetname, index) -> Worksheet 创建sheet, index可省略,返回Worksheet类
index从0开始,省略值为最后
self.copy_worksheet(Worksheet) -> Worksheet 复制sheet,返回Worksheet类,默认名称是原名 Copy
只能复制同一个Workbook下的Worksheet
self[sheetname] -> Worksheet 选中指定Worksheet,返回Worksheet类
self.sheetnames -> list of str 返回sheetname组成的列表
self.worksheets -> list of Worksheet 返回Worksheet类组成的列表
self.remove(sheetname) 删除指定Worksheet
del self[sheetname] 删除指定Worksheet

3 Worksheet

类的地址是:

openpyxl.worksheet.worksheet.Worksheet(parent)

属性为:

Worksheet.title: 表名称
Worksheet.max_row, max_column, min_row, min_column: 有内容的最大最小行列号,从1开始

Worksheet()可以定位其中的Cell()

  • 可以按行号row列号column定位,行列号都从1开始
  • 也可以按坐标coordinate定位:Worksheet['A1']
  • 也可以按坐标范围coordinate_range定位多个Cell()Worksheet['A']Worksheet['A:B']Worksheet['A1:C4']

模块提供转换函数

不属于任何类的方法 说明
get_column_letter(index) -> str 输入列序号,返回列名。3 -> ‘C’
column_index_from_string(str) -> index 输入列名,返回列序号。 ‘C’ -> 3

3.1 对标题、行列数的操作

self=Worksheet类 说明
self.title -> str
self.title = str
读写sheetnamet名称,字符串类型
self.max_row -> num 读取最大列,从1开始,返回数字
self.min_row -> num 读取最小列,从1开始,返回数字
self.max_column -> num 读取最大行,从1开始,返回数字
self.min_column -> num 读取最小列,从1开始,返回数字

3.2 对行高列宽的操作

sheet.row_dimensions.height = 整表行高
sheet.column_dimensions.width = 整表列宽sheet.row_dimensions[行编号].height = 行高
sheet.column_dimensions[列编号].width = 列宽
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.active
# 将整个表的行高设置为 50,列宽设置为 30;
sheet.row_dimensions.height = 50
sheet.column_dimensions.width = 30
# 设置第 1 行的高度
sheet.row_dimensions[1].height = 50
# 设置 B 列的宽度
sheet.column_dimensions["B"].width = 20workbook.save(filename)

3.3 按行或按列操作

self=Worksheet类 说明
self.append(list) 追加一行写入内容
list->字符串的列表
self.delete_rows(idx, amount=1) idx行起删除amount行,idx从1开始
self.delete_cols(idx, amount=1) idx列起删除amount列,idx从1开始
self.insert_rows(idx, amount=1) idx行前插入amount行,idx从1开始
self.insert_cols(idx, amount=1) idx列前插入amount列,idx从1开始
self.rows -> Iter(tuple(Cell)) 将所有行打包用于迭代,返回迭代器
self.columns -> Iter(tuple(Cell)) 将所有列打包用于迭代,返回迭代器
self.iter_rows(min_row, max_row, min_col,
max_col, valuse_only=False) -> Iter(tuple(Cell))
self.iter_rows(min_row, max_row, min_col,
max_col, valuse_only=True) -> Iter(tuple(value))
在指定范围生成行迭代器
参数都可省略,返回迭代器
min_row/col默认为1,max_row/col默认为max
self.iter_cols(min_row, max_row, min_col,
max_col, valuse_only=False) -> Iter(tuple(Cell))
self.iter_cols(min_row, max_row, min_col,
max_col, valuse_only=True) -> Iter(tuple(value))
在指定范围生成列迭代器
参数都可省略,返回迭代器
min_row/col默认为1,max_row/col默认为max

3.3.1 示例:按一行一列迭代

按行分割,每行为一个元组

for row in ws.rowsfor cell in row# code

按列分割,每列为一个元组

for col in ws.colsfor cell in col# code

3.4 对Cell的遍历和定位

self=Worksheet类 说明
self.cell(row, column) -> Cell 按行列号创建Cell,返回Cell类
self[coordinate] -> Cell
self[coordinate_range] -> tuple(Cell)
检索Cell,可切片,返回Cell类型或元组
self.values -> Iter(tuple(value)) 将所有内容打包用于迭代,返回迭代器
self.iter_rows(min_row, max_row, min_col,
max_col, valuse_only=False) -> Iter(tuple(Cell))
self.iter_rows(min_row, max_row, min_col,
max_col, valuse_only=True) -> Iter(tuple(value))
在指定范围生成行迭代器
参数都可省略,返回迭代器
min_row/col默认为1,max_row/col默认为max
self.iter_cols(min_row, max_row, min_col,
max_col, valuse_only=False) -> Iter(tuple(Cell))
self.iter_cols(min_row, max_row, min_col,
max_col, valuse_only=True) -> Iter(tuple(value))
在指定范围生成列迭代器
参数都可省略,返回迭代器
min_row/col默认为1,max_row/col默认为max

3.4.1 示例:用单元格名称切片迭代

指定对角单元格切片,返回二维元组,每行一个元组,包含首尾

work_area = ws['A2':'B3']
print(work_area)####### 结果 ######
((<Cell '外特性图'.A2>, <Cell '外特性图'.B2>),
(<Cell '外特性图'.A3>, <Cell '外特性图'.B3>))

指定行名,返回一维元组

work_area = ws[2]
print(work_area)####### 结果 ######
(<Cell '外特性图'.A2>, <Cell '外特性图'.B2>, <Cell '外特性图'.C2>)

指定行区间,返回二维元组,每行一个元组,包含首尾

work_area = ws[2:3]
print(work_area)####### 结果 ######
((<Cell '外特性图'.A2>, <Cell '外特性图'.B2>, <Cell '外特性图'.C2>),(<Cell '外特性图'.A3>, <Cell '外特性图'.B3>, <Cell '外特性图'.C3>))

指定列名,返回一维元组

work_area = ws['A']
print(work_area)####### 结果 ######
(<Cell '外特性图'.A1>, <Cell '外特性图'.A2>, <Cell '外特性图'.A3>, <Cell '外特性图'.A4>, <Cell '外特性图'.A5>, <Cell '外特性图'.A6>, <Cell '外特性图'.A7>, <Cell '外特性图'.A8>, <Cell '外特性图'.A9>)

指定列区间,返回二维元组,每列一个元组,包含首尾

work_area = ws['B:C']
print(work_area)####### 结果 ######
((<Cell '外特性图'.B1>, <Cell '外特性图'.B2>, <Cell '外特性图'.B3>, <Cell '外特性图'.B4>, <Cell '外特性图'.B5>, <Cell '外特性图'.B6>, <Cell '外特性图'.B7>, <Cell '外特性图'.B8>, <Cell '外特性图'.B9>),
(<Cell '外特性图'.C1>, <Cell '外特性图'.C2>, <Cell '外特性图'.C3>, <Cell '外特性图'.C4>, <Cell '外特性图'.C5>, <Cell '外特性图'.C6>, <Cell '外特性图'.C7>, <Cell '外特性图'.C8>, <Cell '外特性图'.C9>))

3.4.2 示例:按单元格行列号迭代

指定区间,按行排列,得到迭代器。迭代器内每行为一个元组
最小值缺省为1,最大值缺省为max,values_only缺省为False

work_area = ws.iter_rows(min_row=2, max_row=4, max_col=2, values_only=True)
print(list(work_area))####### 结果 ######
[('转速', '扭矩'), ('1/min', 'Nm'), (1000, 116.6)]

指定区间,按列排列,得到迭代器。迭代器内每列为一个元组
最小值缺省为1,最大值缺省为max,values_only缺省为False

work_area = ws.iter_cols(min_row=4, max_row=5, max_col=2, values_only=True)
print(list(work_area))####### 结果 ######
[(1000, 1250), (116.6, 168.4)]

3.5 对合并单元格的操作

① 合并单元格 merge_cells
若合并的多个单元格中均有内容,只保留第一个单元格中的内容

sheet.merge_cells(待合并的格子编号)
sheet.merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.activesheet.merge_cells("C1:D2")
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=3)workbook.save(filename)

② 取消合并单元格 unmerge_cells
取消合并单元格,不能恢复合并单元格所丢失的数据

sheet.unmerge_cells(待合并的格子编号)
sheet.unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.activesheet.unmerge_cells("C1:D2")
sheet.unmerge_cells(start_row=7,start_column=1,end_row=8,end_column=3)workbook.save(filename="./testCase.xlsx")

③ 读取单元格是否被合并

5 Cell

类的地址是:

openpyxl.cell.cell.Cell(parent)

Cell是单元格,属性为:

Cell.value: 单元格内容
Cell.coordinate: 单元格坐标,从‘A1’开始
Cell.row: 单元格行号,从1开始
Cell.column: 单元格列号,从1开始
Cell.column_letter: 单元格列坐标,从‘A’开始

5.1 单元格的值和坐标

self=Cell类 说明
self.value -> str
self.value = str
读写内容,字符串类型或数字类型
self.row -> num 读取行号,返回数字类型
self.column -> num 读取列号,返回数字类型
self.column_letter -> str 读取列坐标,返回string类型
self.coordinate -> str 读取坐标,返回string类型

5.1.1 示例:新建文件

创建EXCEL文件,写入两列数据

from openpyxl import Workbookwb = Workbook()             # 实例化,默认创建第一个Worksheet‘Sheet’
ws1 = wb.active              # 激活第一个Worksheet
ws1.title = '外特性图'        # 修改worksheet名称ws['A1'] = '外特性图'        # 通过Cell名称定位
ws.append(['转速', '扭矩'])  # 在最后一行后面追加内容
ws.append(['1/min', 'Nm'])SPEED_LIST = [1000, 1250, 1500, 1750, 2000, 2250, 2500]
TORQUE_LIST = [116.6, 168.4, 201.4, 204.4, 203.8, 203.2, 203.9]for i in range(4, 10):ws.cell(row=i, column=1, value=SPEED_LIST[i-4])  # 通过cell(row, colum, value)定位ws.cell(row=i, column=2, value=TORQUE_LIST[i-4])wb.save('MyExcel.xlsx')   # 保存文件

5.1.2 示例 :编辑文件

读取文件,添加一列数据

from openpyxl import load_workbookwb = load_workbook('MyExcel.xlsx')
ws = wb['外特性图']ws['C2'] = '功率'
ws['C3'] = 'kW'work_area = ws['A4':'C9']   # 创建由Cell组成的列表
for i in range(6):work_area[i][2].value = work_area[i][0].value * work_area[i][1].value / 9550wb.save('MyExcel.xlsx')   # 保存文件

5.1.3 示例:读取文件

读取文件,将转速是500倍数的行写入text文件

from openpyxl import load_workbookwb = load_workbook('MyExcel.xlsx')
ws = wb['外特性图']work_area = ws.iter_rows(min_row=4, values_only=True)
f = open('my.text', 'w', encoding='UTF-8')
for i in work_area:if i[0]%500 == 0:f.write('   '.join([str(i[0]), str(i[1]), str(i[2])]))f.write('\n')
f.close()

5.2 单元格格式

单元格格式与以下excel界面选项一一对应

5.2.1 数字格式 number_format

5.2.2 单元格对齐

Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)horizontal代表水平方向左对齐left,居中center,右对齐right,分散对齐distributed,跨列居中centerContinuous,两端对齐justify,填充fill,常规generalvertical代表垂直方向居中center,还可以靠上top,靠下bottom,两端对齐justify,分散对齐distributed
workbook = load_workbook(filename)
sheet = workbook.activecell = sheet["A3"]
alignment = Alignment(horizontal="center",vertical="center",text_rotation=45,wrap_text=True)
cell.alignment = alignment
workbook.save(filename)

5.2.3 单元格字体 Font

① 设置字体样式

Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)
from openpyxl.styles import Font
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.active
cell = sheet["A1"]
font = Font(name="微软雅黑", size=20, bold=True, italic=True, color="000000")
cell.font = font
workbook.save(filename)

② 获得字体样式 font

from openpyxl.styles import Font
from openpyxl import load_workbookworkbook = load_workbook(filename="../excelDemo/testCase.xlsx")
sheet = workbook.activecell = sheet["A1"]
font = cell.font
print(font.name) # 字体名称
print(font.size) # 字体大小
print(font.bold) # 是否加粗 返回的是布尔值
print(font.italic) # 是否斜体 返回的是布尔值
print(font.color) # 字体颜色 返回颜色类型和相关参数

5.3.4 单元格边框样式 Side

Side(style=边线样式,color=边线颜色)
style 参数的种类: 'double', 'mediumDashDotDot', 'slantDashDot', 'dashDotDot','dotted','hair', 'mediumDashed', 'dashed', 'dashDot', 'thin', 'mediumDashDot','medium', 'thick'Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
from openpyxl.styles import Side,Border
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.activecell = sheet["D6"]
side1 = Side(style="thin",color="FF0000")
side2 = Side(style="thick",color="FFFF0000")
border = Border(left=side1,right=side1,top=side2,bottom=side2)
cell.border = borderworkbook.save(filename)

5.4.5 单元格填充样式 PatternFill

PatternFill(fill_type=填充样式,fgColor=填充颜色)
from openpyxl.styles import PatternFill,GradientFill
from openpyxl import load_workbookworkbook = load_workbook(filename)
sheet = workbook.activecell = sheet["B9"]
fill = PatternFill(fill_type="solid",fgColor="99ccff")
cell.fill = fill
workbook.save(filename)

5.4.6 单元格保护

>>返回Python系列文章目录<<

Python-Excel读写:openpyxl模块相关推荐

  1. python处理excel之openpyxl模块的使用

    python处理excel之openpyxl模块的使用 from openpyxl import Workbook from openpyxl import load_workbook######## ...

  2. python中的openpyxl模块

    一 python对excel编辑的第三方库 2010版本以下的excel,支持用xlrd 读取,xlwt 编辑,xlutils 复制 2010版本及以上版本excel,支持用openpyxl 读取及编 ...

  3. python excel数据处理功能模块_Python 之Excel 数据处理

    Python 之 Excel 数据处理 一.背景. 运维工作中,可能会遇到同事或者技术领导给Excel 数据进行,数据抽取汇总或者进行运维自动化提供元数据使用,针对以上场景我们需要进行python 处 ...

  4. python 折线图 excel_Python操作Excel,openpyxl模块,画折线图

    一.如图 30万数据,比较大,挤一起了 import sys import uuid import string import json import time import random impor ...

  5. openpyxl 插入列_[Python]Excel编程(openpyxl)学习笔记

    1.基本概念 在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells. Workbook就是一个excel工作表: Sheet是工作表中的一张表页: Cell就是简单的一 ...

  6. openpyxl 列 插入_python3对excel读写openpyxl

    来源:https://www.cnblogs.com/yyht-xgy/p/10945681.html读取: ''' sheet1里面的值按照行取出来,每行组成一个列表 [[1,2,6],[3,4,5 ...

  7. python excel 读写,定义名称

    # coding=utf-8 import re from openpyxl import load_workbook from openpyxl import Workbook # 保存为excel ...

  8. 【python Excel】openpyxl插入图片到表格,支持内存图片对象

    openpyxl编辑xlsx表格文件挺好用的,插入图片也方便. 但是,不知道是我学艺不精还是查资料手法不加,找到的方法默认只能把图片文件添加到表格sheet 如果是内存中的图片对象(比如cv2创建的图 ...

  9. python导入excel模块_python使用openpyxl模块操作excel

    python中的openpyxl模块可以操作excel文件. 使用pip安装pip install openpyxl 支持流行的lxml库(如果已安装).这在创建大文件时特别有用. 为了能够将图像(j ...

  10. Python批量复制一个文件夹中的全部excel数据并粘贴至一个excel文件中-openpyxl模块

    最近工作经常要把多张相同表头,不同内容的数据汇总到一张excel中,为节省复制粘贴时间,我找到了Python中的openpyxl模块进行处理,读取一个文件夹下所有的excel文件并写入一张excel中 ...

最新文章

  1. 学习-现代交换原理与通信技术
  2. 初中计算机实践研究计划,初中信息技术个人研修计划
  3. mysql写到excel_使用Python从 MySQL写数据到Excel
  4. python编写下载器可暂停_Python编写一个优美的下载器
  5. java 类 加载 初始化_java类的加载与初始化
  6. 很强势!因拒绝退回用户保证金,知名在线旅游平台成“老赖”,回应...
  7. android 按钮点击声音,如何在Android中单击按钮时播放声音?
  8. nagios监控安装及设置案例
  9. ubuntu 17.x/CentOS 7.x中安装JAVA JDK
  10. Linux学习笔记2 - 字符界面
  11. 100个常用的 JS 代码
  12. android键盘怎么打韩文,手机韩文输入法九键盘如何使用?
  13. 周志华揭开机器学习本质的57张PPT
  14. sybase 字符串转数字_sybase字符串转日期
  15. ECMAScript - GrammarⅠ
  16. debian宝塔界面安装php失败,debian-live-8.7.1 安装失败求助
  17. 【项目经理入门期】编写里程碑计划
  18. Android Q中通知的设置
  19. c语言2010软件下载,Access2010官方下载免费完整版|Access2010官方下载-太平洋下载中心...
  20. 基于Luca-Kanade光流算法的图像运动场提取matlab仿真

热门文章

  1. CreateMutex互斥量
  2. 人脸识别安全面临三重挑战
  3. 嘉为科技荣登 :2021年福布斯中国企业科技50强
  4. 超好看的网站极简导航网址网站源码模板
  5. 淘宝直播:多媒体终端智能互动实践
  6. I2C通信之Arduino 陀螺仪传感器ITG3205
  7. win10环境安装EMQX过程
  8. 使用Jetson Xavier NX 打开树莓派摄像头
  9. iPhone/三星/Nexus等手机的博通Wi-Fi芯片易被OTA攻击
  10. base cap 分布式_分布式基础(1):CAP原理、BASE思想和最终一致性