素材、笔记文档下载

1 安装openpyxl

Windows用户打开命令行输入:pip install openpyxl

Mac用户打开终端/Terminal输入:pip3 install openpyxl

2 创建新的表格

2.1 创建一个工作簿

from openpyxl import Workbook # 引入openpyxl模块,可以创建xls或者xlsx文件

from openpyxl import Workbookworkbook = Workbook()
sheet = workbook.active
sheet.title = '表格1'
workbook.save(filename='写入表格.xlsx')

2.2 对表格对象的一些操作

2.2.1 新建工作表

create_sheet()方法返回一个新的表格对象

index和title参数,指定新工作表的索引及名称

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
# 使用工作簿对象创建一个新的表格,表格名称为表格2
workbook.create_sheet(index=None,title='表格2')
print(workbook.sheetnames)

index:整数类型,设置新工作表索引,默认为None即放在最后,如果设置为0,则表格放置在最前。

title:字符串类型,设置新工作表名称,如果新工作表名称已存在,新工作表名称会自动变为title1。

2.2.2 删除工作表

remove()方法中接收一个表格对象而不是表格名称的字符串。需要具象化表名。

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook['表格2']
workbook.remove(sheet)
# workbook.remove(workbook['表格2'])
print(workbook.sheetnames)
workbook.save(filename='写入表格.xlsx')

2.2.3 复制工作表

workbook.copy_worksheet(sheet)

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet = workbook['表格1']
workbook.copy_worksheet(sheet)
print(workbook.sheetnames)
workbook.save(filename='写入表格.xlsx')

2.2.4 修改工作表名

sheet.title = ‘工作表名’

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet = workbook['表格1 Copy']
sheet.title = '表格3'
print(workbook.sheetnames)
workbook.save(filename='写入表格.xlsx')

3 读取表格内容

3.1 获取工作簿对象

openpyxl.load_workbook()方法可以接收多个参数进行读取

from openpyxl import load_workbookwb = openpyxl.load_workbook(filename='写入表格.xlsx', read_only=False, keep_vba=False, data_only=False, keep_links=True)
print(wb.sheetnames)

filename:字符串类型,读取Excel文件的文件路径,可使用相对路径或是绝对路径。

read_only:布尔类型,选择只读模式或是读写模式,若想写入公式及重新获取结果,需要用将这个模式关闭。默认为False。

keep_vba:布尔类型,保留vba内容(这并不意味着可以使用它),默认为False。

data_only:布尔类型,如果设置为True则包含公式的单元格,显示最近计算结果或是None,如果设置为False 则单元格显示公式,默认为False。

keep_links:布尔类型,是否保留指向外部工作簿的链接。默认为True。

3.2 获取工作表对象

3.2.1 获取工作薄所有工作表名称

load_workbook(filename=“表格文件路径”) #若是绝对路径直接写文件名。

sheetnames属性可以取得工作簿中所有表名,返回为一个列表。

from openpyxl import load_workbookfileName = "写入表格.xlsx"
wb = load_workbook(filename = fileName)
print(wb.sheetnames)

3.2.2 选中需要操作的工作表

sheet = wb.active # 获取工作簿中的当前活动表

sheet = wb[‘工作表名称’] # 通过工作表名称选中的工作表

sheet.title # 获取活动表的表名称

# 获取上次关闭表格前激活的表格名称
from openpyxl import load_workbook
fileName = "写入表格.xlsx"
wb = load_workbook(filename = fileName)
sheet = wb.active
print(sheet.title)
# 获取特定表的表名称
from openpyxl import load_workbook
fileName = "写入表格.xlsx"
wb = load_workbook(filename = fileName)
sheet = wb['Sheet2']
print(sheet.title)

3.2.3 获取表格范围

获取表格:workbook[sheet名称]

获取表格的尺寸大小:sheet.dimensions(表格存在数据的大小)

单独获取最大行:sheet.max_row
单独获取最大列:sheet.max_column

from openpyxl import load_workbook   workbook = load_workbook(filename="46
sheet = workbook['Booklist 12-26']
print("表格范围是:",sheet.dimensions)
print("最大行数是:", sheet.max_row)
print("最大列数是:", sheet.max_column)

输出结果:

表格范围是: A1:E4693
最大行数是: 4693
最大列数是: 5

3.3 获取单元格对象

3.3.1 获取单元格的某些属性

.row 行数

.column 列数

.coordinate 坐标

from openpyxl import load_workbook                  workbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
cell = sheet['A5']
print("单元格的行号:",cell.row)
print("单元格的列号:",cell.column)
print("单元格的坐标:",cell.coordinate)

输出结果:

单元格的行号: 5
单元格的列号: A
单元格的坐标: A5

3.3.2 获取表格内的数据

3.3.2.1 获取表格内某一范围的数据

# 取某一单元格
cell = sheet['A1']
# 取一列单元格
cells = sheet['A']
# 取一行单元格
cells = sheet[1]
# 取表格当中的所有列,一列为一组
cells = sheet.columns
# 取表格当中的所有行,一行为一组
cells = sheet.rows
# 已知单元格列范围坐标时
cells = sheet['A:C']
cells = sheet['1:3']
# 已知单元格矩形范围坐标时
cells = sheet['A1:C5']
# 已知单元格起始与终结的行列数时
cells = sheet.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3)
cells = sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3)

workbook.active 打开活跃的/唯一的表格

cell.value 格子的数据

from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
cell = sheet['A1']
print(cell.value)

sheet.iter_rows(min_row=最低行数,max_row=最高行数,min_col=最低列数,max_col=最高列数): # 行

sheet.iter_cols(min_row=最低行数,max_row=最高行数,min_col=最低列数,max_col=最高列数): # 列

from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
for row in sheet.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2):print(row)
# for row in sheet.iter_cols(min_row=2,max_row=3,min_col=1,max_col=2):
#     print(row)

3.3.2.2 迭代所有的行/列

.rows

.columns

# 遍历所有的行
from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
获取所有的行
for row in sheet.rows:print(row)
# 遍历所有的列
from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
for col in sheet.columns:print(col)

输出结果:

(<Cell ‘Booklist 12-26’.A1>, <Cell ‘Booklist 12-26’.A2>, <Cell ‘Booklist 12-26’.A3>, <Cell ‘Booklist 12-26’.A4>…

结果一样,输出顺序不一样。

4 对单元格对象的一些操作

4.1 插入行/列

.insert_cols(idx=数字编号,amount=要插入的列数)

.insert_rows(idx=数字编号,amount=要插入的行数)

  • 在idx列左边插入一列
from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet.insert_cols(idx=2)
# sheet.insert_rows(idx=2) # 插入一行
workbook.save(filename='写入表格.xlsx')

  • 在idx列左边插入多列
from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet.insert_cols(idx=2,amount=3)
# sheet.insert_rows(idx=2,amount=3) # 插入多行
workbook.save(filename='写入表格.xlsx')

4.2 删除行/列

.delete_cols(idx=数字编号,amount=要删除的列数)

.delete_rows(idx=数字编号,amount=要删除的行数)

在idx列这一行/列开始,包括idx这一行/列

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet.delete_cols(idx=2)
# sheet.delete_rows(idx=2) # 删除一行
workbook.save(filename='写入表格.xlsx')

4.3 插入一行数据

append()方法接收一个可变参数,包括但不限于列表、范围或生成器或字典

如果传入一个列表:从第一列开始顺序添加所有值,列表元素对应每一行

如果传入一个字典:值被分配给键(数字或字母)指示的列

注意:append一次只能添加一行的数据,如果想要多行添加,需要与循环或其他方法相结合实现。

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
data = [[‘张三',1],[‘李四',2],[‘王五',3],[‘赵六',4],
]
for row in data:sheet.append(row)
workbook.save(filename='写入表格.xlsx')

4.4 修改单元格数据及定义公式

4.4.1 修改单元格数据

  • sheet[‘A1’] = '写入内容’
from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet['A1'] = 'test'
workbook.save(filename='写入表格.xlsx')

输出结果:

表格[A1]:test

  • cell.value ='写入内容’
from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
cell = sheet['A1']
cell.value = 'test'
workbook.save(filename='写入表格.xlsx')

输出结果:

表格[A1]:test

  • sheet与cell结合

sheet.cell(row=行数,column=列数)

cell.value = ‘内容’ # 为单元格赋值

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
cell = sheet.cell(row=1,column=1)
cell.value = 'test'

输出结果:

表格[A1]:test

4.4.2 插入公式

直接赋值公式字符串

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet['B6'] = '=SUM(B2:B5)'
workbook.save(filename='写入表格.xlsx')

查看openpyxl支持的公式

from openpyxl.utils import formulasprint (formulas)

<module ‘openpyxl.utils.formulas’ from ‘D:\Software\Python\lib\site-packages\openpyxl\utils\formulas.py’>

根据这个路径打开相应的formulas.py,显示如下:

FORMULAE = (“CUBEKPIMEMBER”, “CUBEMEMBER”, “CUBEMEMBERPROPERTY”, “CUBERANKEDMEMBER”, “CUBESET”,

4.5 移动单元格

.move_range(‘C1:D4’,rows=2,cols=-2)

正整数为向下或者向右,负整数为向左或者向上,类似于剪贴CTRL+X功能。

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
sheet = workbook.active
sheet.move_range("C1:D4", rows=2, cols=-2)
workbook.save(filename='写入表格.xlsx')

4.6 查看Excel表格内容

4.6.1 设置显示或隐藏状态

设置表格为隐藏状态:sheet.sheet_state = 'hidden'

设置表格为显示状态:sheet.sheet_state = 'visible'

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")
print(workbook.sheetnames)
m = input("是否要隐藏工作表Y/N:")
if m == "Y" or "y":sheet = workbook.activesheet.sheet_state = 'hidden'
else:sheet = workbook.activesheet.sheet_state = 'visible'
workbook.save(filename='写入表格.xlsx')

4.6.2 冻结窗格

sheet.freeze_panes = “单元格”

from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook.active
sheet.freeze_panes = "B2"
workbook.save(filename='4600本书单名.xlsx')

4.6.3 添加筛选

auto_filter.ref

from openpyxl import load_workbookworkbook = load_workbook(filename="4600本书单名.xlsx")
sheet = workbook['Booklist 12-26']
sheet.auto_filter.ref = sheet.dimensions # 对整张表进行筛选
workbook.save(filename='4600本书单名.xlsx')

5 批量调整字体、样式

5.1 获取字体样式

cell.font.属性

from openpyxl.styles import Font
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
font = cell.font
print('font.name是:',font.name,'font.size是:',font.size,'是否粗体:',font.bold,'是否斜体:',font.italic)

5.2 修改字体样式

font = Font(name=‘字体名称’,size =字体大小,bold = 是否粗体,italic = 是否斜体,color =‘字体颜色’)

from openpyxl.styles import Font
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
font = Font(name='宋体',size =12,bold = True,italic = True,color ='FF0000')
cell.font =font
workbook.save(filename='写入表格.xlsx')

5.3 设置单元格格式分类

可以通过设置单元格的风格来设置单元格格式分类

[openpyxl所支持的excel的单元格格式][https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html?highlight=openpyxl.styles.numbers]

from openpyxl.styles import Font
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell = sheet['A1']# 设置单元格分类为百分比
cell.style = '百分比'
cell.style = '常规'# 常规单元格
cell.number_format = 'General'
# 百分比单元格
cell.number_format = '0.00%'
# 科学计数法
cell.number_format = '0.00E+00'
workbook.save(filename='写入表格.xlsx')

5.4 设置对齐样式

Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)

from openpyxl.styles import Alignment
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
alignment = Alignment(horizontal='center',vertical='center',text_rotation=45)
cell.alignment =alignment
workbook.save(filename='写入表格.xlsx')

horizontal:'distributed', 'justify','center','left';'fill', 'centerContinuous','right",'general'
vertical:'bottom', 'distributed','justify','center';'top'
wrap_text:布尔类型,设置是否自动换行
textRotation:整数类型,设置文本旋转角度,最大值180

5.5 设置边框样式

side = Side(style=边线样式,color=边线颜色)
border = Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)

from openpyxl.styles import Side, Border
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
side = Side(style='thin',color='FF000000')
border = Border(left=side,right=side,top=side,bottom=side)
cell.border=border
workbook.save(filename='写入表格.xlsx')

side.style:'double','mediumDashDotDot','slantDashDot','dashDotDot','dotted', 'hair', 'mediumDashed', 'dashed' 'dashDot' ,'thin', 'Dash Dot', 'medium', 'thick'

5.6 设置填充颜色

  • 纯色填充

PatternFill(fill_type=填充样式,fgColor=填充颜色)

  • 渐变颜色填充

GradientFill(stop=(渐变颜色1,渐变颜色2,渐变颜色3…))

from openpyxl.styles import PatternFill, GradientFill
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
cell_a1 = sheet['A1']
pattern_fill = PatternFill(fill_type='solid',fgColor='00B0F0')
cell_a1.fill = pattern_fill
cell_b4 = sheet['B4']
gradient_fill = GradientFill(stop=('FFFFFF', '99CCFF', '000000'))
cell_b4.fill = gradient_fill
workbook.save(filename='写入表格.xlsx')

5.7 设置行高和列高

.row_dimensions[行编号].height = 行高

.column_dimensions[列编号].width = 列宽

from openpyxl.styles import PatternFill, GradientFill
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
sheet.row_dimensions[1].height = 50
sheet.column_dimensions['B'].width = 20
workbook.save(filename='写入表格.xlsx')

5.8 合并单元格

sheet.merge_cells(‘合并的范围’)

sheet.merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

from openpyxl.styles import PatternFill, GradientFill
from openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.active
sheet.merge_cells('C1:C2')
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save(filename='写入表格.xlsx')

6 生成图表

6.1 插入图片

openpyxl.drawing.image

sheet.add_image

from openpyxl import load_workbook
from openpyxl.drawing.image import Imageworkbook = load_workbook(filename='写入表格.xlsx')
sheet = workbook.activelogo = Image("butterfly.png")
logo.height = 100
logo.width = 100sheet.add_image(logo, "D1")
workbook.save(filename='写入表格.xlsx')

6.2 生成图表

6.2.1 插入柱状图

表数据【A1:C7】

项目 产值 数量
A 1802 18
B 2098 20
C 2668 26
D 3537 35
E 3650 36
F 1068 15

BarChart() Reference()

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Referenceworkbook = load_workbook(filename='图表.xlsx')
sheet = workbook.activechart = BarChart()
data = Reference(worksheet=sheet, min_row=1, max_row=7, min_col=2, max_col=3)
categories = Reference(sheet,min_col=1,min_row=2,max_row=7)chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart, "E2")workbook.save(filename='图表.xlsx')

6.2.2 插入条形图

表数据【A19:M21】

月份 广东 上海 北京 辽宁 天津 重庆 四川 浙江 江苏 安徽 江西 福建
一月 221 279 160 340 276 224 326 174 406 454 46 146
二月 364 136 423 77 467 33 454 46 462 129 371 108

LineChart()

from openpyxl import load_workbook
from openpyxl.chart import LineChart, Referenceworkbook = load_workbook(filename='图表.xlsx')
sheet = workbook.activechart = LineChart()
# data = Reference(worksheet=sheet, min_row=1, max_row=7, min_col=2, max_col=3)
# categories = Reference(sheet,min_col=1,min_row=2,max_row=7)data = Reference(worksheet=sheet, min_row=20, max_row=21, min_col=1, max_col=13)
categories = Reference(sheet, min_col=2, min_row=19, max_col=13)chart.add_data(data, from_rows=True, titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart, "E2")workbook.save(filename='图表.xlsx')

Python自动化办公 - 对Excel表格的操作(openpyxl的基本使用)相关推荐

  1. python自动化办公:excel篇,从此做表不加班。

    表格讲解 表格格式 表格分为:工作簿,工作表,单元格 如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表. xlrd +xlwt读写表格 因为电脑右键新建的 ...

  2. Python自动化办公-让 Excel 飞起来

    Python 操作 Excel 可能是自动化办公最火热的需求了,看一看公众号文章底部的视频广告就知道了,里面尽是一些 5 分钟搞定 excel,将数据生成漂亮的图表. 5 分钟虽然有些夸张,但是快速操 ...

  3. Python自动化办公之Excel对比工具

    今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于工作当中经常需要对比前后两个 Exc ...

  4. Python自动化办公之Excel拆分并自动发邮件

    今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要向大约 500 名用户发送带有 E ...

  5. Python自动化办公:pdf文档操作

    在后台回复[阅读书籍] 即可获取python相关电子书~ Hi,我是山月. 之前给大家介绍了python处理excel.word.ppt的相关教程,不知道大家学的怎么样? 在后台回复[自动化办公]即可 ...

  6. python与word交互_[Python] 自动化办公 邮件/Excel/Word交互快速生成介绍信

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: imbox 读取邮件解析附件 openp ...

  7. Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

    前言 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在自动化办公方面具有极大的优 势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定办公需求.快速下班回 ...

  8. Python自动化办公【Excel】

    1 Excel表格自动化 使用Excel自动化处理,将会用到Python第三方库,所以我们需要提前通过pip3来进行安装.安装Python第三方库的命令如下: pip3 install xlrd pi ...

  9. Python 自动化办公之 Excel 对比工具

    作者 | 周萝卜 来源丨萝卜大杂烩 今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于 ...

最新文章

  1. 网络拓扑手工绘制不可或缺
  2. Django之forms组件
  3. 基于用户的协同过滤和皮尔逊相关系数
  4. FreeSWITCH与PSTN对接
  5. pycharm new project变成灰色
  6. Java恶意序列化背后的历史和动机
  7. 使用React和Tailwind CSS搭建项目框架
  8. 华硕获奖方案-构建海量数据处理性能的医院集群系统
  9. 服务器系统如何设置屏幕保护,在windows中要设置屏幕保护程序可以使用控制面板的什么功能?_网站服务器运行维护,windows,屏幕保护程序,控制面板...
  10. 完成端口(CompletionPort)详解
  11. html中居中的三种方式
  12. 浅析地理数据模型发展
  13. 老域名抢注技巧是什么?
  14. 如何写论文中的相关工作部分
  15. matlab满秩分解函数,matlab满秩分解
  16. Linux运维常见面试题汇总
  17. 最简单的Python3安装教程, 支持Dango/Flask/Tensorflow
  18. 八十二烷基笼状聚倍半硅氧烷poss无色透明黏稠液体|提高颜料分散性
  19. 计算机考试工作表怎么做表格步骤,计算机考试Excel表格中换行的方法
  20. 机器学习笔记--微积分

热门文章

  1. AI圣经-深度学习-读书笔记(七)-深度学习中的正则化
  2. 浏览器复制的网址粘贴到文档是超链接
  3. SketchUp教程:火焰与红旗动态视频效果
  4. 全国学科专业英文名称
  5. 【Proteus仿真】【51单片机】交通灯控制系统设计
  6. 3Dflash 图表xml数据封装
  7. maven配置(安装使用私服)文档
  8. 家长育儿必备,孩子身边的故事大王《故事口袋-听听》免费下载
  9. 如何用three.js将3D医学图像渲染到网页上
  10. linux svn 自动更新,Linux(Ubuntu) svn 自动更新设置 hooks(post-commit)