【办公自动化】全网最全python中openpyxl库用法

python中的opepyxl库是一个用于读写Excel2010版本以上的xlsx/xlsm/xltx/xltm文件的Python库,拥有十分强大的功能。

此篇文章介绍openpyxl中的大部分功能。

一.创建新工作簿

import openpyxl as VBA
path="C:/openpyxl/文件1.xlsx"#文件1.xlsx在文件夹中是没有的
fp=VBA.Workbook(path)#根据路径创建新的工作簿
fp.save(path)#保存工作簿(这是openpyxl库中使用完都要进行的步骤,切记切记1)

二.打开旧工作簿

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"#文件2.xlsx在文件夹中是已经存在的
fp=VBA.load_workbook(path)#根据路径打开旧的工作簿
fp.save(path)

三.工作表的查找删除创建与复制

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
fp=VBA.load_workbook(path)
wb=fp.worksheets#显示该工作簿中所有的工作表
print(wb)
fp.save(path)

该操作会输出的工作表名不是xlsx中相同的名称

   这是xlsx中的表名:

 这是openpyxl中输出的表名:

 由上面两张图片可以知道,openpyxl中会多出来“Worksheet”这个字符串,所以若想得到单纯的表名,需要进行进一步的操作。

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"#文件2.xlsx在文件夹中是已经存在的
fp=VBA.load_workbook(path)#根据路径打开旧的工作簿
wb=fp.worksheets#显示该工作簿中所有的工作表
for i in wb:#将所有工作表进行遍历
    print(i.title)#title方法的功能是提取工作表名
fp.save(path)
import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
fp=VBA.load_workbook(path)
"""
以下操作是删除,创建与复制工作表
"""
wst=fp['小红']
fp.remove(wst)#remove方法的功能是删除工作表对象,切记里面参数是工作表对象,而不是工作表名称
fp.remove(fp['小红'])#也可以这样的书写方式
fp.save(path)
fp.create_sheet('小强')#create_sheet方法的功能是创建工作表,参数为工作表名称
fp.save(path)
wst2=fp.copy_worksheet(fp['小强'])#copy_worksheet方法的功能是复制工作表,参数为工作表对象
wst2.title='小丽'#对新复制的工作表修改名称
fp.save(path)

四.获取单元格内容

1.获取单个单元格内容

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
#wst=fp.worksheets[0]    #第二种获取工作表的方式,获取工作簿中的第一个工作表(不建议这么使用)

cells=wst['A1'].value#value方法的功能是输出'小强'工作表中'A1'单元格的值
#cells=wst.cell(row=1,column=1).value   #也可以采取cell方法去获取单元格,row为行,column为列

for i in range(1,10,2):
    print(i,wst.cell(row=i,column=2).value)#可以输出奇数行,第二列的数据

2.获取一个范围内的单元格

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
cell_range=wst['A1:E5']#获取范围:A1:E5
for data in cell_range:
    print(data) #这个for循环是按行提取单元格
for rows in cell_range:
    for data in rows:
        print(data.value)#这个for提取的是各个单元格的数据
a=list(wst.values)#单元格内容按行组成元组
print(a)
b=list(wst.values)[1:3]#通过切片,输出第二行和第三行数据
print(b)


range_=wst.iter_rows(min_row=1,max_row=1,min_col=1,max_col=5)#指定范围提取,min_row为最小行,max_row为最大行,min_col为最小列,max_col为最大列。
for rows in cell_range:
    for cells in rows:
        print(cells.value)  #按行,依次输出单元格值

wst=fp['小强']
for cols in wst.columns:
    for cells in cols:  
        print(cells.value)#按列输出单元格

3.动态输出(当每个表格大小不一样时,只需要确认起始位置就可以输出整个表格)

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
row_max=wst.max_row#得到该表中表格的最大行
row_col=wst.max_column#得到该表中表格的最大列
cell_range=wst.iter_rows(min_row=1,max_row=row_max,min_col=1,max_col=row_col)#关键在这一步
for rows in cell_range:
    for cells in rows:
        print(cells.value)  #按行,依次输出单元格值

五.写入与插入数据

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
wst['G2']='新写入的数据'#写入数据方式1
fp.save(path)#保存于同一个文件
fp.save(path1)#另存
wst.cell(1,8,value='新写入的数据')#写入数据方式2(不建议使用)
liebiao=['(6,1)','(6,2)','(6,3)','(6,4)','(6,5)']
wst.append(liebiao) #按行写入了字符类型的数据
fp.save(path)

for rows in wst['G1:H4']:
    for cells in rows:
        cells.value=520
fp.save(path)#一个指定范围内写入内容

wst.insert_cols(idx=2,amount=5)#idx参数是指在第几列开始插入,amount参数指插入几列数据(如果没有填,默认为1)
wst.insert_cols(2,5)#这种填写方式也行,但是参数顺序不能改变,以下方法也是如此
wst.insert_rows(idx=2,amount=5)#idx参数是指在第几列开始插入,amount参数指插入几列数据(如果没有填,默认为1)
wst.delete_rows(2,5)#idx参数是指在第几列开始删除,amount参数指删除几列数据(如果没有填,默认为1)
fp.save(path)

6.移动与冻结单元格

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
wst.move_range("A1:C3",rows=5,cols=10)  #向下移行,向右移列,参数为负数为反方向
wst.freeze_panes="C3"#冻结指定单元格,往下滚动,小于该行不懂,向右滚动,小于该列不动
wst.freeze_panes="A1"#解冻,只需把参数改为"A1"就可以啦
7.合并单元格.公式.分组.批注,字体,对齐
import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']

wst.merge_cells("A1:G20")#合并单元格
wst.unmerge_cells("A1:G20")#取消合并单元格
wst.save(path)
wst.merge_cells(start_row=1,staer_column=1,end_row=5,end_column=5)#合并单元格
#使用公式
fp=VBA.load_workbook(path,data_only=True)
wst['C1']='=sum(A1:B1)'
print(wst['C1'].value)
#分组
wst.column_dimensions.group('A','D',hidden=True)
fp.save(path)
wst.row_dimensions.group(1,4,hidden=True)
#批注
批注=VBA.comments.Comment('这里要写批注','使用人')
wst['Y1'].comment=批注
#装饰:字体与对齐等
字体对象=VBA.styles.Font(name=u'微软雅黑',bold=True,italic=False,size=48,vertAlign=None)#bold参数指的是’是否加粗‘,italic参数指的是’是否斜体‘,vertAlign指的是“是否为上标”
wst['A1'].font=字体对象
对齐对象=VBA.styles.Alignment(horizontal='general',vertical='bottom',text_rotation=0,wrap_text=False,shrink_to_fit=False,indent=0)

这是修改字体是相关参数

 

8.边框,填充,行高和列宽

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']


#边框
side=VBA.styles.Side(style='thin',color='FF000000')
border=VBA.styles.Border(left=side,right=side,top=side,bottom=side)
wst['A1'].border=border
fp.save(path)
#locked(指定是否锁定单元格)
#hidden(指定是否隐藏公式)
#行高和列宽
wst.row_dimensions[1].height=200
wst.column_dimensions['B'].height=100
fp.save(path)

 9.插入图片

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']


picture=VBA.drawing.image.Image('图片所在路径')
picture.height=100#图片的高
picture.width=70#图片的宽
wst.add_image(picture,'A1')#将图片放到A1单元格里面
wst.save(path)

10.制作柱状图

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']


#新建一个柱状图
chart=VBA.chart.BarChart()
#设定数据的范围(可以包含图例)
data=VBA.chart.Reference(wst,min_row=1,max_row=5,min_col=2,max_col=3)
#x轴
project=VBA.chart.Reference(wst,min_row=2,max_row=5,min_col=1)
#添加数据
chart.add_data(data,titles_from_data=True)
#设定项目
chart.set_categories(project)
wst.add_chart(chart,'E1')
fp.save(path)

11.制作折线图

import openpyxl as VBA
path="C:/openpyxl/文件2.xlsx"
path1="C:/openpyxl/文件4.xlsx"
fp=VBA.load_workbook(path)
wst=fp['小强']
chart=VBA.chart.LineChart()
data=VBA.chart.Reference(wst,min_row=2,max_row=3,min_col=2,max_col=13)
project=VBA.chart.Reference(wst,min_row=1,min_col=2,max_col=13)
chart.add_data(data,form_rows=True,titles_from_data=True)
chart.set_categories(project)
fp.add_chart(chart,'A9')

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 2

打赏作者

统计小陈

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值