ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 表格处理openpyxl

2020-10-20 02:32:00  阅读:271  来源: 互联网

标签:sheet openpyxl 表格 Python 单元格 cell row wb


openpyxl

引用自小甲鱼:https://fishc.com.cn/forum.php?mod=viewthread&tid=102046&extra=page%3D1%26filter%3Dtypeid%26typeid%3D722

1、打开表格

openpyxl.load_workbook('表格路径')

 

2、获取sheet(表)

如果你想获取当期工作簿中所有的工作表,可以使用 get_sheet_names() 方法或者直接打印 sheetnames 属性

wb.get_sheet_names()
['sheet']      

print(wb.sheetnames)
['sheet']

通过 get_sheet_by_name() 方法可以找到指定名称对应的工作表:

 ws = wb.get_sheet_by_name('Sheet')
 type(ws)
<class 'openpyxl.worksheet.worksheet.Worksheet'>

get_sheet_by_name() 方法已经不推荐使用,官方推荐使用更 Pythonic 的 wb["SheetName"] 方式来获取指定工作表

ws = wb['sheetname']

 

3、创建和删除工作表

利用 create_sheet() 和 remove_sheet() 方法可以创建和删除工作表

create_sheet() 默认创建的工作表是存放在现有工作表的后面,名字是 Sheet1,2,3 这样排下去

但我们可以通过参数来修改这一默认设置,index 参数指定新工作表插入的位置(0 表示第一个位置),title 参数指定工作表的名称:

nws = wb.create_sheet(index = 0, title = "FishC Demo")
 wb.get_sheet_names()
['FishC Demo', 'Sheet']

 

删除工作表使用 remove_sheet() 方法,该方法只有一个参数,就是制定待删除的工作表对象

这里需要注意一下,光给个名字是不够的,需要给它一个工作表对象

所以,删除名称为 “sheetname” 的工作表,应该这么写

wb.remove_sheet(wb.get_sheet_by_name("sheetname"))

 

4、定位单元格

获取工作表之后,可以通过像 Python 字典索引那样去定位单元格

单元格对象,拥有 row、column 和 coordinate 属性,代表单元格的行、列和坐标

>>> c = ws['A2']
>>> c.row
2
>>> c.column
'A'
>>> c.coordinate
'A2'

通过value获取值

>>> ws['A2'].value
‘单元格内容’

还可以通过 offset(row, column) 方法,定位距离该单元格 row 行 column 列偏移的另一个单元格

>>> d = c.offset(2, 0)
>>> d.coordinate
'A4'
>>> d.value
'偏移后单元格内容'

 

5、'AAA' 是多少?

这显然是一个常见的问题,由于 Excel 工作表的列是以字母为编号,即 ABCDEFG...Z,到达 Z 之后就从 AA 开始继续编号

所以列的话是以二十六进制的形式来表示数据的。

不过好在 openpyxl 的作者早已洞悉这一切,并提供了 get_column_letter() 和 colunm_index_from_string() 方法来帮助大家进行转换。

比如我们想知道第 496 列如何表示,可以使用 openpyxl.cell.cellget_column_letter(496) 方法进行转换(确实是有两个 cell 哈)

 

 

>>> openpyxl.cell.cell.get_column_letter(496)
'SB'

 

如果我们知道列的编号是 “JB”,可以使用 openpyxl.cell.cell.column_index_from_string('JB') 方法得知其实际上位于第几列

>>> openpyxl.cell.cell.column_index_from_string('JB')
262

 

6、如何访问多个单元格

openpyxl 允许将工作表对象进行切片操作,即表示一个范围内的多个单元格

>>> for each_movie in ws['A2':'B10']:
        for each_cell in each_movie:
                print(each_cell.value, end=' ')
        print('\n')

从上面代码中我们可以看出,对于一个范围内的多个单元格,openpyxl 是遵循 “先行后列” 的原则进行迭代的

 

我们还可以通过工作表的 rows 和 columns 属性获取当前工作表下所有行或列的迭代。(也是个人最常用的方式)

>>> for each_row in ws.rows:
        print(each_row[0].value)

 

如果不想一次性迭代所有的行或列,可以使用 iter_rows() 和 iter_columns() 方法进行控制:

>>> for each_row in ws.iter_rows(min_row=2, min_col=1, max_row=4, max_col=2):
        print(each_row[0].value)

 

7、拷贝工作表

拷贝整个工作表,可以使用工作簿对象的 copy_worksheet() 方法:

>>> new = wb.copy_worksheet(ws)
>>> wb.save(r"C:\Users\goodb\Desktop\豆瓣TOP250电影.xlsx")

 

标签:sheet,openpyxl,表格,Python,单元格,cell,row,wb
来源: https://www.cnblogs.com/zhx-blog/p/13844232.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有