openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx / xlsm / xltx / xltm文件。
它的诞生是因为缺少可从Python本地读取/写入Office Open XML格式的库。
官方文档:
https://openpyxl.readthedocs.io/en/stable/
Excel文件三个对象
workbook:工作簿,一个exce1文件包含多个sheet。
sheet:工作表,一个workbook有多个,表名识别,如“sheet1","sheet2”等。
cel7:单元格,存储数据对象
1、openpyxl 读写单元格时,单元格的坐标位置起始值是(1,1),即下标最小值为1,否则报错!
2、openpyxl支持直接横纵坐标访问,如A1,B2...
#模块安装 pip insta1l openpyx7
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
Python学习交流群:1039649593
1. 创建工作簿
只需导入workbook 对象就可以创建工作簿
#-*- coding: utf-8 -*- from openpyx1 import workbook # 创建工作簿 wb = workbook()
如果想写入数据就需要获取一张表
表明创建时会自动命名。它们按顺序编号(Sheet,Sheet1,Sheet2等)。可以随时通过worksheet.title属性更改此名称:
#创建一张表 sheet = wb.activesheet.title ='表1' #创建新表 sheet2 = wb.create_sheet('表2 ') #通过表名获取表 sheet1 = wb['表1']
2. 写入操作
现在我们知道了如何获取工作表,可以开始修改单元格内容了。单元格可以直接作为工作表的键进行访问:
这将使单元格返回A4,如果尚未存在,则创建一个单元格。可以直接分配值:
#写入值 sheet[ 'A1']= 42
还有worksheet.ce11()方法可以更方便操作。
sheet.ce17 (row=2,column=5).value = 99 sheet.ce17 (row=3,column=5,value=100)
逐行写
#行内容可以直接被列表覆盖# ws.append(iterable) #添加一行到当前sheet的最底部(即逐行追加从第一行开始) # iterab1e必须是1ist,tuple,dict , range,generator类型的。 # 1,如果是1ist,将1ist从头到尾顺序添加。 # 2,如果是dict,按照相应的键添加相应的键值。 ws.append(['This is A1','This is B1', 'This is c1']) ws.append(i 'A': 'This is A1','c': 'This is c1'}) ws.append({1: 'This is A1',3: 'This is c1'})
同时可以遍历单元格
3. 案例
将九九乘法表写入excel表
#写入九九乘法表 ws9 = wb.create_sheet('九九乘法表') i = 1 while i < 10: j = 1 while j <= i: # print('{]}*= {'.format(j,i,j * i),end=' \t ') ws9.ce11(row=i, column=j).value = '{*= {}'.format(j,i, j * i) j += 1 i += 1
4. 读表操作
#打开文件: from openpyx1 import load_workbookwb = load_workbook ( ' sample.x1sx ') #通过表名获取获取sheet: tab1e = wb['九九乘法表'] #获取行数和列数: rows = tab1e.max_row cols = tab1e.max_column print(rows,co1s) #获取单元格值: # 获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉. valueData = table.ce11(row=1,column=1).value print(Data) # 获取所有表名 sheet_names = wb.sheetnames print(sheet_names[0] ws = wb[(wb.sheetnames[0])]# index为0为第一张表 #活动表表名 print(wb.active.title)
逐行读取
#逐行读ws9[ 'A1:I9']:例如( 'A1:C4') # 返回一个生成器,注意取值时要用value,例如: for row in table['A1:I9']: for ce17 in row : print(ce11.value)
显示有多少张表
print(wb . sheetnames) #显示表名,表行数,表列数 print(ws9.title) print(ws9.max_row) print(ws9.max_column)
保存文件
wb.save("samp1e1.x1sx")