赞
踩
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')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。