1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python自动化办公 - 对Excel表格的操作(openpyxl的基本使用)

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

时间:2020-01-27 14:07:52

相关推荐

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

素材、笔记文档下载

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.activesheet.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# 使用工作簿对象创建一个新的表格,表格名称为表格2workbook.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.activesheet = 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.activesheet = 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_workbookfileName = "写入表格.xlsx"wb = load_workbook(filename = fileName) sheet = wb.activeprint(sheet.title)

# 获取特定表的表名称from openpyxl import load_workbookfileName = "写入表格.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="46sheet = 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.activecell = 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.activefor 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.activefor 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.activesheet.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.activesheet.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.activesheet.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.activedata = [[‘张三',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.activesheet['A1'] = 'test'workbook.save(filename='写入表格.xlsx')

输出结果:

表格[A1]:test

cell.value ='写入内容’

from openpyxl import load_workbookworkbook = load_workbook(filename="写入表格.xlsx")sheet = workbook.activecell = 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.activecell = 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.activesheet['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.activesheet.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.activesheet.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 Fontfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell = sheet['A1']font = cell.fontprint('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 Fontfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell = sheet['A1']font = Font(name='宋体',size =12,bold = True,italic = True,color ='FF0000')cell.font =fontworkbook.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 Fontfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell = 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 Alignmentfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell = sheet['A1']alignment = Alignment(horizontal='center',vertical='center',text_rotation=45)cell.alignment =alignmentworkbook.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, Borderfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell = sheet['A1']side = Side(style='thin',color='FF000000')border = Border(left=side,right=side,top=side,bottom=side)cell.border=borderworkbook.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, GradientFillfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activecell_a1 = sheet['A1']pattern_fill = PatternFill(fill_type='solid',fgColor='00B0F0')cell_a1.fill = pattern_fillcell_b4 = sheet['B4']gradient_fill = GradientFill(stop=('FFFFFF', '99CCFF', '000000'))cell_b4.fill = gradient_fillworkbook.save(filename='写入表格.xlsx')

5.7 设置行高和列高

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

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

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

5.8 合并单元格

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

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

from openpyxl.styles import PatternFill, GradientFillfrom openpyxl import load_workbookworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activesheet.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_workbookfrom openpyxl.drawing.image import Imageworkbook = load_workbook(filename='写入表格.xlsx')sheet = workbook.activelogo = Image("butterfly.png")logo.height = 100logo.width = 100sheet.add_image(logo, "D1")workbook.save(filename='写入表格.xlsx')

6.2 生成图表

6.2.1 插入柱状图

表数据【A1:C7】

BarChart() Reference()

from openpyxl import load_workbookfrom 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】

LineChart()

from openpyxl import load_workbookfrom 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')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。