码迷,mamicode.com
首页 > 编程语言 > 详细

python处理Excel文档

时间:2019-11-16 17:37:39      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:返回值   one   索引   通过   function   val   rip   package   title   

安装pip

安装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

 

 

 

 

 

 

 

 

 

 

 

python处理Excel文档

标签:返回值   one   索引   通过   function   val   rip   package   title   

原文地址:https://www.cnblogs.com/anyux/p/11872370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!