标签:返回值 one 索引 通过 function val rip package title
安装openpyxl
pip install openpyxl
使用openpyxl读取excel文档
一个 Excel文档 称为一个工作簿,一个工作簿包含多个表格,在Excel中能称为sheet。打开工作簿后会默认显示一个表格,这个表格一般称为活跃表。每个单元格都有唯一的坐标。行的坐标使用数字表示,列的坐标使用字母表示。,表格中左上角的单元格,坐标"A1"
openpyxl中有三个不同层次的类。每个类都包含了若干属性和方法,便于获取表格数据
Workbook对应 Excel工作簿(文档)
Worksheet对应sheet (表格)
cell 对应 单元格
一个Workbook对象代表一个Excel文档,创建一个文件对象,使用load_workbook函数,接受filename参数
wb是一个wb对象,它拥有很多的属性和方法
active:获取活跃的Worksheet
read_only:是否以read_only模式打开Excel文档
encoding:文档的字符集编码
properties:文档的元数据,如标题,创建者,创建日期等
worksheets:以列表的形式返回所有的Worksheet
In [12]: wb.active Out[12]: <Worksheet "c"> In [13]: wb.read_only Out[13]: False In [14]: wb.worksheets Out[14]: [<Worksheet "python">, <Worksheet "java">, <Worksheet "c">] In [15]: wb.encoding Out[15]: ‘utf-8‘ In [16]: wb.properties Out[16]: <openpyxl.packaging.core.DocumentProperties object> Parameters: creator=‘wps‘, title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2018, 5, 25, 19, 28), modified=datetime.datetime(2019, 11, 16, 15, 51, 27), lastModifiedBy=‘root‘, category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None
Workbook对象的方法大都与Worksheet相关。常用方法如下:
get_sheet_names:获取所有表格的名称
get_sheet_by_name:通过表格名称获取Worksheet对象
get_active_sheet:获取活跃的表格
remove_sheet:删除一个表格
create_sheet:创建一个空的表格
copy_worksheet:在Workbook内拷贝表格
In [25]: wb.get_sheet_by_name("c") /usr/local/lib/python3.6/site-packages/IPython/__main__.py:1: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]). # encoding: utf-8 Out[25]: <Worksheet "c"> In [26]: wb.get_active_sheet() /usr/local/lib/python3.6/site-packages/IPython/__main__.py:1: DeprecationWarning: Call to deprecated function get_active_sheet (Use the .active property). # encoding: utf-8 Out[26]: <Worksheet "c"> In [27]: wb.get_sheet_names() /usr/local/lib/python3.6/site-packages/IPython/__main__.py:1: DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames). # encoding: utf-8 Out[27]: [‘python‘, ‘java‘, ‘c‘]
以上告警信息 DeprecationWarning弃用警告 ,建议使用以下功能
In [29]: wb.sheetnames Out[29]: [‘python‘, ‘java‘, ‘c‘] In [30]: wb[‘python‘] Out[30]: <Worksheet "python"> In [31]: wb[‘java‘] Out[31]: <Worksheet "java"> In [32]: wb[‘c‘] Out[32]: <Worksheet "c"> In [34]: wb.active Out[34]: <Worksheet "c">
拿到一个worksheet就相当于拿到一个表格
worksheet表格属性如下
title:表格的标题
dimensions:表格的大小,这时原大小是指有含有数据的表格大小
max_row:表格的最大行
min_row:表格的最小行
max_column表格的最大列
min_column表格的最小列
rows按行获取单元格(Cell对象)
columns按列获取单元格(Cell对象)
freeze_panes冻结窗格
values:按行获取表格的内容(数据)
In [35]: ws = wb.active In [36]: ws Out[36]: <Worksheet "c"> In [37]: ws.title Out[37]: ‘c‘ In [38]: ws.dimensions Out[38]: ‘A1:A1‘ In [39]: ws.min_column Out[39]: 1 In [40]: ws.max_column Out[40]: 1 In [41]: ws.min_row Out[41]: 1 In [42]: ws.max_row Out[42]: 1 In [43]: ws.columns Out[43]: () In [44]: ws.rows Out[44]: () In [45]: ws.values Out[45]: <generator object values at 0x7f215f80c0a0>
其中,columns、rows和values这几个属性都是通过生成器的方式返回数据。 openpyxl的设计中,需要返回数据时都是通过生成器获取所有的数值。需要注意的是,columns与rows返回的是Cell对象,values返回的是数据
freeze_panes这个参数取值为None表示不冻结任何窗格。为A1表示冻结第一行。B1表示冻结第一列。同时冻结第一行和第一列,则为B2
Worksheet(表格)一些常用的方法:
iter_rows:按行获取所有单元格(Cell对象)
iter_columns:按获取单元格
append:在表格末尾添加数据
merged_cells:合并多个单元格
unmerge_cells:移除合并的单元格
In [46]: list(ws.iter_rows(min_row=2,max_row=4,min_col=1,max_col=3)) Out[46]: [(<Cell ‘c‘.A2>, <Cell ‘c‘.B2>, <Cell ‘c‘.C2>), (<Cell ‘c‘.A3>, <Cell ‘c‘.B3>, <Cell ‘c‘.C3>), (<Cell ‘c‘.A4>, <Cell ‘c‘.B4>, <Cell ‘c‘.C4>)]
从Worksheet(表格)的属性和方法的使用中,其返回值为Cell对象。一个Cell对象表示一个单元格。
获取单元格,指定Excel坐标
In [47]: ws[‘A1‘] Out[47]: <Cell ‘c‘.A1> In [48]: ws[‘B1‘] Out[48]: <Cell ‘c‘.B1> In [49]: ws.cell(row=1,column=2) Out[49]: <Cell ‘c‘.B1> In [50]: ws.cell(row=1,column=1) Out[50]: <Cell ‘c‘.A1>
Cell对象比较简单,其常用属性如下
row:单元格所在的行
column:单元格所在的列
value单元格取值
cordinate:单元格坐标
ws.values通过生成器访问数据并按行返回
In [51]: from __future__ import print_function In [52]: for row in ws.values: ...: print(*row) ...: None None None None None None None None None None None None
rows属性按行返回Cell对象,因此,我们使用列表推导来获取每一个Cell对象的值
In [53]: for row in ws.rows: ...: print(*[cell.value for cell in row]) ...: None None None None None None None None None None None None
iter_rows方法在不加任何参数的情况下,与rows属性效果相同,因此,这种方法与前一种方法很像
In [55]: for row in ws.iter_rows(): ...: print(*[cell.value for cell in row]) ...: None None None None None None None None None None None None
最后这种方式是最麻烦的方式,首先获取表格的最小行数和最大行数,然后获取最小列数与最大列数,通过行和列的索引确定一个唯一单元格。确定单元格以后,打印单元格的值。这种方式是每确定一个单元格打印一次,因此,在print函数中将end参数取值来避免避免换行,并在内层for循环结束以后,显示地进行换行
In [57]: for i in range(ws.min_row,ws.max_row + 1): ...: for j in range(ws.min_column,ws.max_column + 1): ...: print(ws.cell(row=i,column=j).value,end=‘ ‘) ...: print() ...: None None None None None None None None None None None None
标签:返回值 one 索引 通过 function val rip package title
原文地址:https://www.cnblogs.com/anyux/p/11872370.html