深⼊浅出理解数据分析系列之:pythonopenpyxl库处理Excel⽂档
深⼊浅出理解数据分析系列之:python openpyxl库处理Excel⽂档
openpyxl是⼀个读写Excel2010(xlsx/xlsm)⽂档的Python库,能够同时读取和修改Excel⽂档。⼀个Excel⽂档称为⼀个⼯作薄,在Office2010下,典型⼯作薄的⽂件扩展名为xlsx。⼀个⼯作薄可以包含多个表格。Excel通过⾏和列表⽰⼀个单元格,⾏的坐标使⽤数字表⽰,列的坐标使⽤字母表⽰。例如表格左上⾓的单元格,其坐标为"A1"。
openpyxl是⼀个开源项⽬,在使⽤之前需要先进⾏安装:
pip install openpyxl
openpyxl有三个不同层次的类,分别是Workbook、Worksheet和Cell。
Workbook是对Excel⼯作薄的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象。
⼀、⼯作簿Workbook
在操作⼀个Excel之前,应该先创建⼀个Workbook对象。对于创建⼀个新的Excel⽂档,直接进⾏Workboo
k类调⽤即可。对于读取⼀个已经有的Excel⽂档,可以使⽤openpyxl模块的load_workbook函数。该函数接受多个参数,但只有filename参数为必传参数。
import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
rows函数的使用方法及实例workbook对象有多种属性和⽅法:
1. active:获取活跃的Worksheet
2. read_only:是否以read_only模式打开Excel⽂档
3. encoding:⽂档的字符集编码
4. properties:⽂档的元素及,如标题、创建者、创建⽇期等
5. worksheets:以列表的形式返回所有的Worksheet
import openpyxl
wb = openpyxl.load_workbook(r"D:/tmp/test.xlsx")
wb.active
#<Worksheet "Sheet1">
#False
#utf-8
wb.worksheets
#[<Worksheet "Sheet1">]
Workbook对象的⽅法⼤都与Worksheet相关。常⽤的⽅法如下:
1. sheetnames:获取所有表格的名称
2. wb[表名]:通过表格名称获取Worksheet对象
3. get_active_sheet:获取活跃的表格
4. remove_sheet:删除⼀个表格
5. create_sheet:创建⼀个空的表格
6. copy_worksheet:在Workbook内拷贝表格
wb.sheetnames
#['学⽣信息']
wb["学⽣信息"]
#<Worksheet "学⽣信息">
⼆、表单Worksheet
通过Worksheet对象获取表格属性,得到单元格中的数据,修改表格中的内容。
1. title:表格的标题
2. dimension:表格的⼤⼩
3. max_row:表格的最⼤⾏
4. min_row:表格的最⼩⾏
5. max_column:表格的最⼤列
6. min_column:表格的最⼩列
7. rows按⾏获取单元格(cell对象)
8. columns按列获取单元格(cell对象)
9. freeze_panes冻结窗格,主要⽤于在表格较⼤时冻结顶部的⾏或左边的列。对于冻结的⾏或列,就算⽤户滚动电⼦表格,也是始终可
见的
10. values按⾏获取表格的内容(数据)
ws = wb["学⽣信息"]
#学⽣信息
ws.title
#A1:H5
ws.dimensions
#8
ws.max_column
#1
ws.min_column
#<generator object Worksheet._cells_by_col at 0x000002314A4E6930>
#<generator object Worksheet._cells_by_row at 0x000002314A4E6930>
#<generator object Worksheet.values at 0x000002314A4E6930>
ws.values
这段代码中,通过Workbook[表名]获取Worksheet对象。通过不同的属性名获取student这张表的属性。其中,columns、rows和values这⼏个属性都是通过⽣成器的⽅式返回数据。
Worksheet常⽤的⼀些⽅法:
1. iter_rows:按⾏获取所有单元格(Cell对象)
2. iter_columns:案列获取所有的单元格
3. append:在表格末尾添加数据
4. merged_cells:合并多个单元格
5. unmerge_cells:移除合并的单元格
其中,iter_rows⽅法和iter_columns⽅法在参数取默认值时,与rows属性和columns属性的作⽤相同。区别在于,iter_rows⽅法和iter_columns⽅法可以通过函数参数限定访问表格的范围。
list(ws.iter_rows(min_row=2,max_row=4,min_col=1,max_col=3))
[(<Cell '学⽣信息'.A2>,<Cell '学⽣信息'.B2>,<Cell '学⽣信息'.C2>),(<Cell '学⽣信息'.A3>,<Cell '学⽣信息'.B3>,<Cell '学⽣信息'.C3>),(<Cell '学⽣信息'.A4>, <Cell '学⽣信息'.B4>,<Cell '学⽣信息'.C4>)]
从Worksheet的属性和⽅法的使⽤中可以看到,很多属性和⽅法返回的是⼀个Cell对象。⼀个Cell对象就代表⼀个单元格,可以直接使⽤Excel坐标的⽅式获取Cell对象,也可以使⽤Worksheet的cell⽅法获取cell对象。
ws['A2']
#<Cell '学⽣信息'.A2>
#<Cell '学⽣信息'.B1>
三、⾏row、列column、单元格Cell
Cell对象常⽤属性如下;
1. row:单元格所在的⾏
2. column:单元格所在的列
3. value:单元格的取值
4. cordinate:单元格的坐标
⽤四种⽅法打印student表中的内容:
#"第⼀种⽅法:"
for row ws:
print(*row)
#"第⼆种⽅法:"
for row ws:
print(*[cell.value for cell in row])
#"第三种⽅法:"
for row in ws.iter_rows():
print(*[cell.value for cell in row])
#"第四种⽅法:"
for i in range(ws.min_row,ws.max_row +1):
for j in range(ws.min_column,ws.max_column +1):
ll(row=i,column=j).value,end='')
print()
四、使⽤openpyxl修改Excel⽂档
openpyxl可以读取Excel⽂档,⽽且还可以修改Excel⽂档,包括修改单元格的数据、合并单元格、修改单元格的字体、在Excel⽂档中画图等。
新建⼀个⼯作薄就是创建⼀个Workbook对象,创建完Workbook对象以后,默认会有⼀个名为”sheet1“的表格,通过表格的名称来获取这个表格。获取表格以后,通过给表格的title属性赋值的⽅式来修改表格的名称。
import datetime
#创建⼀个Workbook对象
wb = openpyxl.Workbook()
#['Sheet']
#获取Worksheet对象
ws = wb['Sheet']
ws.title ="学⽣信息"
#创建⼀个worksheet对象
#['new sheet', '学⽣信息']
print(wb.sheetnames)
#删除⼀个worksheet对象
#['学⽣信息']
print(wb.sheetnames)
#填充单元格的数据
ws['A1']='Hello world'
ws['A2']= w()
#调⽤Workbook的save⽅法将数据保存到磁盘之中wb.save(r"D:\tmp\openpyxl.xlsx")
五、案例:统计平均分和总分
def process_worksheet(sheet):
avg_column = sheet.max_column +1
sum_column = sheet.max_column +2
for row in sheet.iter_rows(min_row=2,min_col=6):
scores =[cell.value for cell in row]
sum_score =sum(scores)
avg_score = sum_score /len(scores)
# 计算平均分总和,并且保存到最后两列
def main():
wb = openpyxl.load_workbook(r"D:/tmp/test.xlsx")
ws = wb["学⽣信息"]
process_worksheet(ws)
wb.save(r"D:/tmp/学⽣成绩统计.xlsx")
if __name__ =='__main__':
main()
六、案例:合并多个Excel⽂档到⼀个Excel⽂档
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论